c++ - C++中的私有(private)继承

标签 c++ inheritance private

我正在学习 OOPS 的概念,并遇到了私有(private)继承。从我所学到的-当一个类派生自基类和信派生类被实例化时,首先调用基类的构造函数,然后调用派生类的构造函数。因此,在代码中,“A created”将首先打印出来。 问题是既然继承是private的,那么A的所有成员在B内部都是private的,那么实例化B的时候怎么调用A的构造函数呢。按照这个逻辑,下面的代码应该会产生错误,但是当我运行它时,它编译得很好,并给出输出“A created”,然后是“B created”。 这是怎么回事?还是我在理解这个概念时犯了一些错误?

#include <iostream>
using namespace std;

class A{
public:
    A(void)
    {
        cout<<"A created"<<endl;
    }
    ~A()
    {
        //do nothing
    }
    void doSomething(void)
    {
        cout<<"hi";
    }
};    

class B:private A
{
    public:
    B(void)
    {
        cout<<"B created"<<endl;
    }
    ~B()
    {
        //do nothing
    }
};

int main() {
    B* myptr = new B();
    //myptr->doSomething();
    delete myptr;
    return 0;
}

最佳答案

B 可以调用 A 的公共(public)(和 protected )方法,因为 A 的构造函数是公共(public)的,B 可以调用它。

请参阅以下链接以更好地理解 C++ 私有(private)继承: Difference between private, public, and protected inheritance

关于c++ - C++中的私有(private)继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18682144/

相关文章:

c++ - 使用 boost 查找数据集的峰度

c++ - 赋值重载 : why does using the same object cause problems in the program?

powershell - 在 Powershell 中设置 InheritanceFlags 与 PropagationFlags

c++ - 如何规避 Intel C++ 编译器的 `decltype` 和继承问题?

c++ - 击败 C++ 访问资格的最干净方法是什么?

c++ - 从 map 中获取所有值

git - Docker:如何使用 ssh 访问私有(private) github 存储库?

c++ - 如何在 QT 中逐步加载小部件?

c++ - 嵌套类中的 "Invalid covariant return type"错误,其方法返回基于模板的对象

java - 为什么java不允许继承final类?