2010-07-02 96 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

由于对象的“派生”部分尚未构造,所以不能调用成员函数,这是未定义的行为。

相关问题