C++中的多级保护继承

Posted

技术标签:

【中文标题】C++中的多级保护继承【英文标题】:Multilevel protected Inheritance in C++ 【发布时间】:2021-11-20 15:42:50 【问题描述】:

我有一个场景,我正在实现多级继承,但第一级继承被指定为受保护的继承,但这给了我编译问题。

class A

 protected:
    int a1;
;

class B: protected A

 protected:
    int b1;
;

class C: public B 

public:
    C()
    
        a1=10;
        b1=20;
        cout<<a1<<b1<<endl;
    
;

int main()

    C c;   //can access A class protected data
    A* a= new C; //compilation error: cannot cast 'C'to its protected base class 'A'

我的问题是当我使用指定的受保护访问进行继承时,我能够访问所有 A 类数据成员,那么为什么我不能拥有一个持有 C 对象的 A 类类型的指针?

【问题讨论】:

en.cppreference.com/w/cpp/language/access 每个人都知道CB,但只有BC 知道BCAs。 main 不是BC 的一部分,因此它不能利用这种关系。 不在main范围中访问受保护的成员数据。那将在C::C() 的范围内。 【参考方案1】:

由于其受保护状态,main 不知道继承关系。

class B: protected A

是什么使它在B::C:: 之外无法访问

【讨论】:

以上是关于C++中的多级保护继承的主要内容,如果未能解决你的问题,请参考以下文章

C++多级虚继承编译问题

C++ 多级继承 - 调用基本构造函数错误

C++ 中的默认继承模式(公共、保护或私有)是啥? [复制]

C++继承:公有,私有,保护

在c++中的继承,如何在子类中重载成员函数

C++多继承