昨天我遇到了一个错误,虽然很容易解决,但我想确保我对C++的理解是正确的。
我有一个基类,其中包含一个受保护的成员:
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
上添加一个公共的 getter 方法解决了这个问题,但我想知道为什么我不能直接访问 b
。我认为当你使用公有继承时,受保护的变量仍然对派生类可见。