现在的位置: 首页 > 综合 > 正文

构造函数和析构函数中的虚函数调用

2013年10月07日 ⁄ 综合 ⁄ 共 426字 ⁄ 字号 评论关闭
 构造函数和析构函数中的虚函数调用 
    一个类的虚函数在它自己的构造函数和析构函数中被调用的时候,它们就变成普通函数了,不“虚”了。也就是说不能在构造函数和析构函数中让自己“多态”。例如:

class A
{
public:
    A() 
{ foo();}        // 在这里,无论如何都是A::foo()被调用!
    ~A() { foo();}       // 同上
    virtual void foo();
}
;

class B: public A
{
public:
    
virtual void foo();
}
;

void bar()
{
    A 
* a = new B;
    delete a;
}


    如果你希望delete a的时候,会导致B::foo()被调用,那么你就错了。同样,在new B的时候,A的构造函数被调用,但是在A的构造函数中,被调用的是A::foo()而不是B::foo()。

抱歉!评论已关闭.