派生类的继承访问
class A
{
private:
int age;
};
class B:private A
{
public:
int Getage()
{
return age;
}
};
B b1;
cout<< b1.Getage()<<endl; 派生类私有继承基类之后,基类中的所有成员相对于派生类都是私有的,派生类的成员函数无法访问基类中的私有成员,所以return age失败。
class A
{
protected:
int age;
};
class B:private A
{
public:
int Getage()
{
return age;
}
};
B b1;
cout<< b1.Getage()<<endl; 将int age改成protected,继承方式还是private,为什么就可以访问了呢?私有继承基类之后,基类成员在派生类中不都是私有的吗?
ACG初心者
9 years, 6 months ago
Answers
你的理解有误
子类私有继承基类的protected/public,这个成员会变成子类的private成员,相当于变成
class B:private A
{
private:
int age;
public:
int Getage()
{
return age;
}
};
自己当然可以访问自己的私有成员了,所以私有继承的用法就是不仅让子类无法继承自己的private成员(所有类型的继承都是这样),而且自己的非private成员,也变成只能继承一次,防止了多层继承。
付一张表格
基类中 继承方式 子类中
public & public继承 => public
public & protected继承 => protected
public & private继承 = > private
protected & public继承 => protected
protected & protected继承 => protected
protected & private继承 = > private
private & public继承 => 子类无权访问
private & protected继承 => 子类无权访问
private & private继承 = > 子类无权访问
钉宫其实是狮子
answered 9 years, 6 months ago