派生类的继承访问

发布于 2022-09-01 12:59:58 字数 468 浏览 11 评论 0

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,为什么就可以访问了呢?私有继承基类之后,基类成员在派生类中不都是私有的吗?



如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

如果没有你 2022-09-08 12:59:59

private成员是不能被子类继承的,只属于该类本身。
protected和public成员才可以被子类继承。

遥远的她 2022-09-08 12:59:59

试试这个

cppclass A {
public:
    int age;
}

class B: public A {
}

class C: private A {
}

B b;
int ba = b.age;

C c;
int ca = c.age;
jJeQQOZ5 2022-09-08 12:59:59

你的理解有误
子类私有继承基类的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继承 = > 子类无权访问

挽袖吟 2022-09-08 12:59:59

C++ primer第五版P543&&P544
派生访问说明符,也就是私有继承,共有继承对于派生类的成员和友元来说没什么影响。
派生访问说明符的目的是控制派生类用户对于基类成员的访问权限。。额 有点抽象是吧,,没事,你看下书就知道了。。哈哈

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文