在繼承中,當派生類被實例化(派生類obj被創建)時,第一個內存被擱置。在此之後,派生類構造函數被調用。繼承 - 實例化問題
class Base
{
public:
int m;
Base(int x=0)
: m(x)
{
}
};
class Derived: public Base
{
public:
double n;
Derived(double y=0.0)
: n(y)
{
}
};
在上面的例子中,當創建派生類對象時,調用派生類的構造函數。
問題是,從我所研究的基類構造函數在調用派生類構造函數之前調用。但是,派生類中的任何地方都沒有明確的指令來首先轉到基類構造函數。編譯器如何知道基類構造函數必須先被執行?
我想答案應該是這條線在基類中聲明:
class Derived: public Base
但是,問題是通過改變派生類,如下所示,我們可以確保基類構造函數被調用之前初始化派生構造函數體執行。
class Derived: public Base
{
public:
double n;
Derived(double y=0.0, int z=0)
: Base(z), n(y)
{
}
};
所以,問題是,在第一個例子中,沒有聲明,告訴基類構造函數首先被調用,但它實際上是第一次調用,在第二改變的例子,我告訴編譯器將跳轉首先是基類構造函數。難道它不知道首先轉到基類構造函數?這兩個例子之間執行的區別是什麼?步驟是什麼?
Regards,
在第二個示例中,編譯器不會調用基類構造函數,並在它看到調用之前對其進行了初始化在派生類的構造函數?? – Krishna 2011-04-09 17:52:48
在這兩個例子中基礎構造函數被稱爲第一個 – 2011-04-09 17:57:39