c++中构造函数和析构函数能够调用虚函数

2021-06-05 15:02

阅读:590

标签:--   实现   virtual   类型   font   构造   虚函数   des   his   

1. 从语法上讲,构造函数和析构函数都能调用虚函数,没有问题;

2. 从实际效果上,无法实现虚函数的作用,

例如,基类的构造函数中即使调用虚函数,也是调用的基类自己实现的虚函数;

           基类的析构函数中即使调用虚函数,也是调用的基类自己实现的虚函数;

《Effective c++》条款09:不要在构造函数和析构函数中调用virtual函数,因为这类调用不会下降至派生类;

解释如下:

派生类对象的基类构造期间,对象的类型是基类的类型,而不是派生类类型;

 

class CBase
{
public:
    CBase()
    {
        cout "this is CBase create"  endl;
        func();
        cout "********************"  endl;
    }

    ~CBase()
    {
        cout "this is ~CBase destory"  endl;
        func();
        cout "---------------------"  endl;
    }

    virtual void func()
    {
        printf("this is CBase func\n");
    }

};

 

class CSub : public CBase
{
public:
CSub()
{
printf("this is CSub create\n");
func();
cout }

~CSub()
{
printf("this is ~CSub destory\n");
func();
cout }

virtual void func()
{
printf("this is CSub func\n");
}
};

{
CSub c;
}

this is CBase create
this is CBase func
********************
this is CSub create
this is CSub func
+++++++++++++++++++
this is ~CSub destory
this is CSub func
===================
this is ~CBase destory
this is CBase func
---------------------

 

c++中构造函数和析构函数能够调用虚函数

标签:--   实现   virtual   类型   font   构造   虚函数   des   his   

原文地址:https://www.cnblogs.com/weiyouqing/p/14626134.html


评论


亲,登录后才可以留言!