據我瞭解,我們無法將派生類對象傳遞給基類繼承的基類引用的原因是由於派生是從Base中私下繼承的,Base的默認構造函數在派生的構造函數之前調用。但是因爲它是私有的,並且不會繼承到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的一個錯誤(宣傳私下繼承的構造爲public)。 是我想要的有效?任何人都可以告訴我嗎?
感謝您的回覆。 –