【发布时间】:2011-09-19 19:18:32
【问题描述】:
我不明白以下内容,当Derived 继承自Base 时,它可以访问可以通过派生函数访问的受保护成员。但是,如果Base 类尝试从Derived 类(它本身允许访问Base)访问它自己的成员,它就无法访问,为什么?
class Base {
protected:
int x;
};
class Derived : Base {
public:
void foo(Base* b);
};
void Derived::foo(Base* b) {
b->x = 2; // cannot access protected member,
// though Derived inherits from Base, why?
}
【问题讨论】:
-
在您的示例中,
Derived没有访问从Base派生的自己的成员。它正在访问派生自Base的其他一些对象成员。 -
另请注意,受保护的数据(相对于方法)非常容易违反基类的不变量。
-
@parc84:我添加了一条评论来解决您删除的问题。
标签: c++ inheritance