gpt4 book ai didi

c++ - 访问派生类中的 protected 成员

转载 作者:IT老高 更新时间:2023-10-28 13:58:34 25 4
gpt4 key购买 nike

我昨天遇到了一个错误,虽然很容易解决,但我想确保我对 C++ 的理解是正确的。

我有一个带有 protected 成员的基类:

class Base
{
protected:
int b;
public:
void DoSomething(const Base& that)
{
b+=that.b;
}
};

这编译和工作得很好。现在我扩展 Base 但仍想使用 b:

class Derived : public Base
{
protected:
int d;
public:
void DoSomething(const Base& that)
{
b+=that.b;
d=0;
}
};

请注意,在这种情况下,DoSomething 仍然引用 Base,而不是 Derived。我希望我仍然可以访问 Derived 内的 that.b,但我收到 cannot access protected member 错误(MSVC 8.0 - 还没有尝试过 gcc)。

显然,在 b 上添加一个公共(public) getter 解决了这个问题,但我想知道为什么我不能直接访问 b。我认为,当您使用公共(public)继承时, protected 变量仍然对派生类可见。

最佳答案

类只能访问此类或派生类实例的 protected 成员。它不能访问父类或表亲类实例的 protected 成员。

在您的情况下, Derived 类只能访问 Derived 实例的 b protected 成员,而不能访问 Base 实例。

将构造函数更改为采用 Derived 实例即可解决问题。

关于c++ - 访问派生类中的 protected 成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3247671/

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