码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2021-04-08 13:11:02      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:--   实现   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 << "+++++++++++++++++++" << endl;
}

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

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!