最佳答案
我昨天遇到了一个错误,虽然很容易解决,但我想确保我正确地理解了 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。我认为当您使用公共继承时,受保护的变量对于派生类仍然是可见的。