据我了解,我们不能将派生类对象传递给基类引用以进行私有继承的原因是,由于 Derived 是从 Base 私有继承的,因此 Base 的默认构造函数将在 Derived 的构造函数之前调用。但是因为它是私有的并且没有继承给 Derived,所以我们得到一个编译器错误。
但是,如果我尝试为 Base 创建一个公共构造函数并私下从 Derived 继承,然后将公共状态重新分配给 Base 的构造函数,它是否允许我将派生的实例传递给 Base 引用?
我尝试如下,
#include <iostream>
using namespace std;
class base
{
public:
base(){}
void print(){ puts("In base"); }
};
class derived : private base
{
public:
base::base; /* Throws an error - Declaration doesnt declare anything*/
void print(){ puts("In derived"); }
};
void func(base& bRef)
{
}
int main()
{
derived dObj;
func(dObj); /* Throws an error - 'base' is an inaccessible base of derived */
}
它为 base::base 抛出错误(将私有继承的构造函数公开)。我正在尝试的是否有效?谁能告诉我?