【问题标题】:Multilevel protected Inheritance in C++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 类类型的指针?

【问题讨论】:

  • 每个人都知道CB,但只有BC 知道BCAs。 main 不是BC 的一部分,因此它不能利用这种关系。
  • 不在main范围中访问受保护的成员数据。那将在C::C() 的范围内。

标签: c++ inheritance protected


【解决方案1】:

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

class B: protected A

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-14
    • 2016-09-04
    • 2020-09-09
    • 1970-01-01
    相关资源
    最近更新 更多