编写高质量代码——避免在构造析构函数中调用虚函数
来源:互联网 发布:高仿充q币软件 编辑:程序博客网 时间:2024/05/21 14:40
构造函数中显式地调用虚函数:
#include <iostream>
using namespace std;class Base{
public :
Base(){
cout << "Base constructor" << endl;
Init();
}
virtual void Init(){
cout << "Base::Init " << endl;
}
};
class Derived :public Base{
public :
Derived():Base(){
cout << "Derived constructor" << endl;
}
virtual void Init(){
cout << "Derived::Init " << endl;
}
};
int main(){
Derived d;
return 0;
}
Result:
Base constructor
Base::Init
Derived constructor
构造函数:在派生类被正确构造出来之前,调用派生类的虚成员函数是没有意义的,在基类构造器运行的时候派生类的数据成员还没有被初始化。派生类的正确构造必须以基类的正确构造为前提。由于此时派生类对象的数据成员尚未被初始化,不应允许多态行为的发生,只能退而求其次,调用基类的虚函数 Init 了。
================================================
析构函数:在对象析构期间,存在与上面类似的逻辑:执行哪个虚函数取决于它被绑定到了哪里。析构顺序遵从的是从继承类到基类,一旦派生类数据析构,在基类析构函数中调用虚函数就没了“多态的能力”,C++仅仅会将其作为一个基类对象来进行处理。
================================================
如果为纯虚函数,调用成功的机会都没有。
0 0
- 编写高质量代码——避免在构造析构函数中调用虚函数
- 12. 避免用序列化类在构造函数中为不变量赋值 ——《编写高质量代码:改善Java程序的151个建议》
- 避免在析构函数中编写代码
- 编写高质量代码——谨防因构造函数抛出异常而引发的问题
- 在构造函数/析构函数中调用虚函数
- 在构造函数/析构函数中调用虚函数
- C++中构造函数和析构函数避免调用虚函数的问题 转载
- C++中构造函数和析构函数避免调用虚函数的问题
- C++中构造函数和析构函数避免调用虚函数的问题
- C++中构造函数和析构函数避免调用虚函数的问题
- C++中构造函数和析构函数避免调用虚函数的问题
- C++中构造函数和析构函数避免调用虚函数的问题
- C++中构造函数和析构函数避免调用虚函数的问题
- 避免构造/析构函数调用虚函数
- 避免构造/析构函数调用虚函数(转)
- 避免构造/析构函数调用虚函数(转)
- 避免构造/析构函数调用虚函数
- C++箴言:避免构造或析构函数中调用虚函数 zz
- 设计模式——行为型模式
- linux wi/wim命令
- linux服务器之CPU
- 由递增序列生成平衡的查找二叉树
- QT android的问题
- 编写高质量代码——避免在构造析构函数中调用虚函数
- Windows Vista/7桌面边栏小工具开发入门
- jrtplib编程步骤文档代码解析
- QtQstring转QByteArray
- 关于sleep(0)
- LeetCode Search a 2D Matrix
- Java 加密解密 对称加密算法 非对称加密算法 MD5 BASE64 AES RSA
- QT弹出有一个提示对话框
- QT获取编辑框的内容