c++中构造函数和析构函数能够调用虚函数
2021-06-05 15:02
标签:-- 实现 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
上一篇:C语言实现“三子棋”游戏
下一篇:C++ 调用 Lua 代码
文章标题:c++中构造函数和析构函数能够调用虚函数
文章链接:http://soscw.com/index.php/essay/90919.html