2010-07-02 91 views
-1

可能重複:
Calling virtual functions inside constructorsC++:從基礎構造函數調用函數?

class Base 
    { 
    virtual void method() 
     { cout << "Run by the base."; }; 
    public: 
    Base() { method(); }; 
    }; 

class Derived: public Base 
    { 
    void method() 
     { cout << "Run by the derived."; }; 
    }; 

void main() 
    { 
    Derived(); 
    } 

輸出:

Run by the base. 

怎麼能一個已經運行,而不是派生的方法,未做派生的構造函數?

+2

-1這個問題在SO上已經問了很多次,你可以很容易地找到它。 – 2010-07-02 14:25:07

+0

我試過了,但我沒想過要搜索「虛擬」這個詞。無論如何,抱歉浪費你的時間,如果你想讓我關閉它,告訴我如何,但我認爲這個例子總結得很好。 – 2010-07-02 14:29:24

+0

只是谷歌「從構造函數調用虛函數」你會發現**噸**有用的信息。我希望我可以結束由於「首先使用Google」 – Andrey 2010-07-02 14:48:53

回答

1

無需增加額外的代碼,你不能做到這一點。

一種常見的方式來實現,這是使用新創建的對象上的私有構造函數和create函數首先調用構造(經由new),然後第二finish_init方法。這確實會阻止您在堆棧上創建對象的實例。

+0

對象的兩個階段創建是一個壞主意。構造者的要點是避免這一點。瞭解PIMPL模式(適用於所有優秀的設計模式書籍)。 – 2010-07-02 16:15:13

2

由於對象的「派生」部分尚未構造,所以不能調用成員函數,這是未定義的行爲。

相關問題