【发布时间】: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 类类型的指针?
【问题讨论】:
-
每个人都知道
C是B,但只有B和C知道B和C是As。main不是B或C的一部分,因此它不能利用这种关系。 -
不在main范围中访问受保护的成员数据。那将在
C::C()的范围内。
标签: c++ inheritance protected