c ++中私有继承的目的

时间:2014-05-05 04:03:19

标签: c++ inheritance

我试图用c ++继承实验。我写了以下代码:

#include <stdio.h>

class A
{
public:
    virtual void foo();
};

class B: A
{
    void foo();
};

void B::foo()
{
    printf("Derived class");
}

void A::foo()
{
    printf("Base class");
}

int main()
{
    A *a= new B();
    a->foo();
}

但我的错误描述为

  

test.cpp:在函数'int main()'中:test.cpp:26:14:错误:'A'是一个   难以接近的'B'基地

如果我将行class B: A替换为class B: public A,它可以正常工作。但是使用这个事实我真的不明白在什么情况下可能需要privateprotected继承。现在对我来说没用了。

1 个答案:

答案 0 :(得分:0)

您正在使用B::foo()访问A*。但是,继承的A::foo()和被覆盖的B::foo()都是私有的。

关于继承概念:

public:派生类IS-A基类 private / protected:派生类有一个基类\派生类是基于类的实现。

派生对象可替换为基础对象时公开继承。派生类只需要实现基类(不是接口)时私有地继承。但在后一种情况下,组合是优先的方法而不是继承。

检查thisthis