我正在学习 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/