C++型變化C++類型的變化 - 虛函數問題刪除期間
我讀過,當你構建一個派生類型,類型的變化,這取決於構造函數被調用。因此,如果您創建派生對象並使用基指針調用虛函數,那麼通常它會映射到派生類中的實現。如果您在基類構造函數中調用虛函數,它將使用基類實現,因爲該對象的類型在技術上與該函數中的基類類型相同。例如(臨時代碼,對不起,如果它不編譯):
class Base {
Base()
{
std::cerr << "Base Constructor.";
func();
}
virtual void func() {
std::cerr << "Func base called." << std::endl;
}
};
class Derived : public Base {
Derived()
{
std::cerr << "Derived Constructor.";
func();
}
void func() {
std::cerr << "Func derived called." << std::endl;
}
};
int main() {
Derived* d = new Derived;
delete d;
}
應該輸出:
Base Constructor.
Func base called.
Derived Constructor.
Func derived called.
首先,這是總是正確的還是取決於執行?
如果我使用了RTTI和typeinfo,打印在底座上的類型實際上是底座的類型,還是更多的是不成文的規則類型?
從構造函數中調用虛擬函數是否有危險,或者只要知道自己在做什麼,它是否安全?
「爲了簡化簡單」和錯誤的。 –