【问题标题】:Purpose of private inheritance in c++ [duplicate]C ++中私有继承的目的[重复]
【发布时间】:2014-06-21 06:57:38
【问题描述】:

我正在尝试在 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 继承。现在对我没用了。

【问题讨论】:

  • public 继承引入了其他代码可见和可用的 IS-A 关系。 protected 继承限制了对派生类的关系可见性。 private 继承仅限于此类。这有助于避免客户端代码与实现细节相关联。但是,private 继承是一种特殊情况,因为从基类继承的虚拟成员函数在派生类中仍然是虚拟的(并且可以在派生类中被覆盖),只是无法调用。
  • 关于该主题的另一篇 SO 帖子:stackoverflow.com/questions/860339/…

标签: c++ inheritance


【解决方案1】:

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

关于继承概念:

public : 派生类 IS-A 基类 私有/受保护:派生类有一个基类\派生类是根据基类实现的。

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

检查thisthis

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-17
    • 1970-01-01
    • 2020-03-13
    • 2011-05-30
    • 2021-07-16
    • 2015-01-21
    • 2017-04-08
    • 2020-09-01
    相关资源
    最近更新 更多