雖然滾過SO,我發現這個問題虛基類和繼承
#include <iostream>
using namespace std;
class base
{
public:
base()
{
cout << "ctor in base class\n";
}
};
class derived1 : public base
{
public:
derived1()
{
cout <<"ctor in derived class\n";
}
};
int main()
{
derived1 d1obj;
return 0;
}
有這樣的問題: - 當創建d1obj,控制首先到達的基類構造函數,然後它去派生類構造函數?或者它是相反的:它首先到達派生類的構造函數,發現它有基類,因此控制權轉到基類的構造函數中?
和aswer包含的部分
當一個類有虛基類是很常見的導致發射出兩個不同的函數體構造 - 一個使用時,這個類是最派生類型,以及一個用於這個類本身就是一個基類的時候。原因是虛擬基類是由派生最多的類構造的,以確保它們共享時只構造一次。因此,構造函數的第一個版本將調用所有基類構造函數,而第二個版本將只調用非虛擬基類的構造函數。
任何人都可以向我解釋這個例子嗎?
Here是鏈接,這個問題
您的示例沒有虛擬基類,因此不能用於解釋問題的粗體斜體部分。這是編譯器如何特別爲虛擬繼承(「鑽石繼承」)構造構造函數的特殊情況,其中類派生自的兩個類具有相同的基類。我從來沒有在我的10多年編程C++中使用它(除了「這裏是一個虛擬繼承的例子」) –