【发布时间】:2014-04-24 09:30:39
【问题描述】:
我一直以为我知道protected 是什么意思。这里也有一个很好的解释:Private and Protected Members : C++。
我将其理解为:每当我处于派生类的上下文中时,我都可以调用其基类的受保护成员。
在下面的代码中,我试图在派生类中调用受保护的方法,但它是在另一个继承分支中的另一个对象上调用的。由于某种原因,这会导致错误(在 g++ 和 clang++ 中都尝试过)。
#include <iostream>
class A {
protected:
void foo() {
std::cout << "Hello world!\n";
}
};
class B : public A {
};
class C : public A {
public:
void bar(B* other) {
foo(); //OK
other->foo(); //Error
}
};
int main() {
return 0;
}
所以我的问题是:究竟受保护成员的规则是什么?它最近是否随着新的 C++ 标准而改变?
【问题讨论】:
-
“受保护成员的确切规则是什么?”如果您想要确切的规则,请阅读标准。 “它最近是否随着新的 C++ 标准而改变?”没有。
标签: c++ access-modifiers