Effective C++ 条款9
2015-06-22 11:15
471 查看
绝不在构造和析构过程中调用virtual函数
本节有个核心的知识点就是在构造函数和析构函数中,virtual函数失去多态性。试想一下,假设此时在构造函数和析构函数中,virtual函数没有失去多态性,会出现什么问题。我们知道构造次序吧,先构造base类部分,再构造derived部分。
那么在base类构造过程中,derived的参数都没有被初始化。virtual函数一旦具有多态性,调用的就是派生类的函数,那么它使用的派生类中数据成员将是未初始化的,必然导致未定义行为。
所以,一句话。在构造函数和析构函数中,virtual函数和普通函数没任何区别。
class Transaction{ public: Transaction(); virtual void logTransaction()const//virtual function { //log the Transaction std::cout<<"This is Transaction logTransaction"<<std::endl; } }; Transaction::Transaction() { logTransaction();//called in Ctor } class BuyTransaction:public Transaction{ public: virtual void logTransaction()const { std::cout<<"This is BuyTransaction logTransaction"<<std::endl; } }; class SellTransaction:public Transaction{ public: virtual void logTransaction()const { std::cout<<"This is SellTransaction logTransaction"<<std::endl; } }; BuyTransaction b;
相关文章推荐
- 【读书笔记:C++ primer plus 第六版 中文版】第5章 循环和关系表达式
- 中国大学MOOC-翁恺-C语言程序设计习题集 题目号03-1 Source code
- c语言头文件存在的合理性
- VC++中subclassdlgitem函数的功能、用法及注意事项
- 中国大学MOOC-翁恺-C语言程序设计习题集 题目号03-0 Source code
- C++ MFC实现CVsflexgridn1存放字符操作
- C++ 模态对话框与非模态对话框
- C语言中的序列点和副作用
- 中国大学MOOC-翁恺-C语言程序设计习题集 题目号02-4 Source code
- 中国大学MOOC-翁恺-C语言程序设计习题集 题目号02-3 Source code
- 如何在visual c++ 6.0下调试c语言
- C++经典笔试题详解
- C语言笔记之scanf函数
- 动态规划的简要总结和四个经典问题的c++实现
- C++可怜的内存管理机制漫谈及奇怪补救auto_ptr介绍
- [C++ primer]第三章笔记--字符串、向量和数组
- Effective C++ 条款8
- 二叉树系列:初探二叉树,c语言实现
- iOS_小问题积累(类中c语言函数的调用)
- C++静态链表