11.2.5 在构造函数或析构函数中进行访问

    构造函数和析构函数是特殊的成员函数,在其中访问虚函数时,C++采用静态联编,即在构造函数或系统函数内,使用“this->虚函数名”的形式来调用,编译器仍将其解释为静态联编的“本类名:虚函数名”。

    如下例所示。


    class base { public: virtual void disp() { cout<<"hello,base"<<endl; } }; class child:public base { public: child() { disp(); } void disp() { cout<<"hello,child"<<endl; } };

    使用上述代码定义的类创建child类对象时,输出信息总是“hello,child”,换言之,在child的构造函数中,不论是用disp()还是this->disp()来调用,编译器都会将其解释为child:disp(),此时,若想在child构造函数中调用base类的disp函数,必须使用作用域运算符,即base:disp()的形式。

    注意

    在构造函数和析构函数中调用虚函数并未体现虚函数真正的意义,不推荐这种用法,在类设计时应尽量避免。