gpt4 book ai didi

c++ - 使用指向基类的指针访问 protected 继承成员

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:55:51 25 4
gpt4 key购买 nike

谁能解释为什么这段代码不起作用。

class A
{
public:
A(void){}
virtual ~A(void){}
protected:
A* parent;
};

class B : public A
{
public:
B(void){parent = new B;}
~B(void){delete parent;}
protected:
int a;
};

class C : public B
{
public:
C(void){}
virtual ~C(void){}
void f(void){ ((B*)parent)->a; }
};

C 怎么可能无法访问 B 的成员?

如果我将 parent 转换为 C* 而不是 B* 它工作正常。但我不希望用户承担任何不必要的风险。是否有更简洁的方式访问 a

谢谢。

最佳答案

C 类的对象中,您可以访问 B 的 protected 成员,但前提是它们是类 C< 的某个对象的一部分(也许是你的,也许不是)。换句话说,要从 C 访问 a,您需要一个指向 C 的指针(或引用)。这就是 protected 修饰符的意思。

原因如下。 ((B*)parent) 指针可能指向 B 的其他子类,完全不同于 C,并且该子类可能具有一个成员不可访问。

关于c++ - 使用指向基类的指针访问 protected 继承成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19328410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com