我正在学习 OOPS 的概念,并遇到了私有继承。从我所学到的——当一个类从基类派生时,当派生类被实例化时,首先调用基类的构造函数,然后是派生类的构造函数。因此,将首先打印代码中的“A created”。问题是由于继承是私有的,A的所有成员在B内部都是私有的,那么在实例化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;
}