#include<iostream>
using namespace std;
//公共继承
class Base1
{
public:
int m_A;
protected:
int m_B;
private:
int m_C;
};
class son1 : public Base1
{
public://以下是son1的公共部分
void func()
{
m_A=10;//父类中的公共权限成员,到子类中依然是公共权限。
m_B=10;//父类中的保护权限成员,到子类中依然是保护权限。子可以访问,但其他人不可以。
//m_C=10;//父类中的私有权限成员,到子类中依然是私有权限,子类访问不到。
}
};
void test01()
{
son1 s1;
s1.m_A=100;
//s1.m_B=200;cannot access protected member declared in class 'Base1'
//到son1中,m_B是保护权限,类外访问不到。
}
//保护继承
class Base2
{
public:
int m_A;
protected:
int m_B;
private:
int m_C;
};
class son2 : protected Base2
{
public:
void func()
{
m_A=10;//父类中的公共权限成员,到子类中变为保护权限。
m_B=10;//父类中的保护权限成员,到子类中依然是保护权限(变为保护权限)。子可以访问,但其他人不可以。
//m_C=10;//父类中的私有权限成员,到子类中,对子类来说,依然是私有权限,子类访问不到。
}
};
void test02()
{
son2 s2;
//s2.m_A=100;//到son2中,m_A变为保护权限,类外访问不到。
//cannot access public member declared in class 'Base2'
//s2.m_B=200;cannot access protected member declared in class 'Base1'
//到son2中,m_B是保护权限,类外访问不到。
}
//私有继承
class Base3
{
public:
int m_A;
protected:
int m_B;
private:
int m_C;
};
class son3 : private Base3
{
public://可以让全局函数访问这个类
void func()
{
m_A=10;//父类中的公共权限成员,到子类中变为私有权限,并且是son3的私有。
m_B=10;//父类中的保护权限成员,到子类中变为私有权限。
//m_C=10;//父类中的私有权限成员,到子类中,对子类来说,依然是私有权限,子类访问不到。
}
};
class grandson3 : public son3
{
public:
void func()
{
//m_A=10;//父类son3中的私有权限成员,到子类中无法访问。
//m_B=10;//父类son3中的私有权限成员,到子类中无法访问。
//m_C=10;//父类son3都访问不到,在孙子类中更加无法访问。
}
};
void test03()
{
son3 s3;
//s3.m_A=100;//到son3中,m_A变为私有权限,类外访问不到。
//cannot access public member declared in class 'Base2'
//s3.m_B=200;cannot access protected member declared in class 'Base1'
//到son3中,m_B是私有权限,类外访问不到。
}
int main()
{
//test01();
test02();
test03();
system("pause");
return(0);
}