我昨天遇到了一个错误,虽然它很容易解决,但我想确保我正确理解C++.
我有一个受保护成员的基类:
class Base
{
protected:
int b;
public:
void DoSomething(const Base& that)
{
b+=that.b;
}
};
Run Code Online (Sandbox Code Playgroud)
这编译并且工作得很好.现在我扩展Base但仍想使用b:
class Derived : public Base
{
protected:
int d;
public:
void DoSomething(const Base& that)
{
b+=that.b;
d=0;
}
};
Run Code Online (Sandbox Code Playgroud)
请注意,在这种情况下DoSomething仍然参考a Base,而不是Derived.我希望我仍然可以访问that.b内部Derived,但我得到一个cannot access protected member错误(MSVC 8.0 - 还没有尝试过gcc).
显然,添加一个公共getter b解决了这个问题,但我想知道为什么我无法直接访问b.我认为,当您使用公共继承时,受保护的变量对派生类仍然可见.
c++ ×1