标签:-- 实现 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 ---------------------
标签:-- 实现 virtual 类型 font 构造 虚函数 des his
原文地址:https://www.cnblogs.com/weiyouqing/p/14626134.html