以下代码给出的错误是“A”是“B”无法访问的基础,我不确定原因:
class A {};
class B : protected A {};
A foo( A a );
///
B b;
foo(b);
对此的任何解释都非常赞赏。
编辑:我想我只是对保护继承的本质感到困惑。我认为这意味着任何派生类(在本例中为A)都可以继承其变量及其函数。
答案 0 :(得分:2)
继承受保护父类的类可以访问它,否则它被认为是私有的:
class A {};
class B : protected A {};
A foo(A a) { return a; };
class C : public B {
public:
A foo(C c) { return c; };
};
int main() {
B b;
//foo(b); // Can't implicitly convert, A is protected (might as well be private from this line's perspective)
C c;
A a = c.foo(c); // class C can get A
}