【发布时间】:2018-11-27 03:57:16
【问题描述】:
我昨天遇到了一个错误,虽然很容易解决,但我想确保我对 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 上添加一个公共吸气剂解决了这个问题,但我想知道为什么我不能直接访问b。我认为,当您使用公共继承时,受保护的变量仍然对派生类可见。
【问题讨论】:
-
查看gotw.ca/gotw/076.htm(注意:不要在生产代码中使用这些东西)。
标签: c++