目录
一:继承访问权限
继承是类的重要特性。A类继承B类,我们称B类为“基类”,A为“子类”,继承有三种方式,分别为公有继承方式(public),保护继承(protected)和私有继承(private)。
在公有继承方式中基类的私有成员,子类不可以访问;基类的保护成员,子类可以继承为自己的保护成员,在外部不可以访问;基类的公有成员,子类可以继承为自己的公有成员,在外部也可以访问。
在保护继承方式中基类公有成员,子类中继承为自己的保护成员,在外部不可以访问;基类保护成员,子类中继承为自己的保护成员,在外部不可以访问;基类私有成员,子类一样不可以访问基类的私有成员。
在私有继承方式中基类公有成员,子类中继承为自己的私有成员,在外部不可以访问;基类保护成员,子类中继承为自己的私有成员,在外部不可以访问;基类私有成员,子类一样不可以访问基类的私有成员。
下图也清晰的表达了继承的各种关系
现在来进行测试:
首先是A具有public, protected, private等变量
class A
{
public:
int A_1;
protected:
int A_2;
private:
int A_3;
};
然后是B1,B2,B3分别以public, protected, private方式继承A
class B1: public A
{
public:
void test()
{
A_1 = 10;
A_2 = 10;
//A_3 = 10; 无法访问
}
int B1_1;
protected:
int B1_2;
private:
int B1_3;
};
class B2: protected A
{
public:
void test()
{
A_1 = 10;
A_2 = 10;
//A_3 = 10; 无法访问
}
int B2_1;
protected:
int B2_2;
private:
int B2_3;
};
class B3 : private A
{
public:
using A::A_1;
void test()
{
A_1 = 10;
A_2 = 10;
//A_3 = 10; 无法访问
}
int B3_1;
protected:
int B3_2;
private:
int B3_3;
};
在上面代码可以发现对于子类无法访问基类的私有变量。接下来看在外部的访问情况,讲解会在代码的注释上面
void test1()
{
A a;
a.A_1=10;
//a.A_2; a.A_3 A类的protected和private