C ++中受保护的类继承

时间:2016-10-05 14:50:27

标签: c++

以下代码给出的错误是“A”是“B”无法访问的基础,我不确定原因:

class A {};
class B : protected A {};
A foo( A a ); 
///
B b; 
foo(b);

对此的任何解释都非常赞赏。

编辑:我想我只是对保护继承的本质感到困惑。我认为这意味着任何派生类(在本例中为A)都可以继承其变量及其函数。

1 个答案:

答案 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
}