Effective C++ 条款9 决不在构造和析构过程后调用虚函数
2015-08-22 15:04
281 查看
1. 在一个继承体系中,最底层的派生类在构造过程中,先初始化基类部分,再按继承层次依次初始化派生类部分,因此被构造的对象先作为一个基类对象,再按继承层次依次成为派生类对象,例如,在继承层次A→B→C→D中,构造一个D类对象,其依次经历了A→B→C→D的转变,因此对于以下代码:
View Code
这样就可以确保调用合适的构造函数.
class A{ public: void foo(){ cout << "A" << endl; } A(char ch='a'){ if(ch=='a') foo(); } }; class B :public A{ public: void foo(){ cout << "B" << endl; } B(char ch = 'b') :A(ch){ if (ch == 'b') foo(); } }; class C :public B{ public: void foo(){ cout << "C" << endl; } C(char ch = 'c') :B(ch){ if (ch == 'c') foo(); } }; class D :public C{ public: void foo(){ cout << "D" << endl; } D():C('d'){ foo(); } };
View Code
这样就可以确保调用合适的构造函数.
相关文章推荐
- bcb 6.0工程平移C++ builder xe8环境
- C++基础知识
- 二叉树的前、中、后序遍历与重构问题
- 归并排序(C/C++)
- C++ 4 种具有更 为准确语义的新强制转换类型
- C Primer Plus 学习笔记
- c++ primer 复习-函数
- C++内存分配一:C++程序内存的基本组成
- C语言求素数的算法
- C++中将string类型转换为int, float, double类型 主要通过以下几种方式:
- C++ int类型转换string类型
- C++常见面试
- C++面试常见题目问与答(汇总一)
- POJ C++程序设计 编程题#4:魔兽世界之一:备战
- 图解C++
- C#在C++编写的DLL中注册函数并回调
- C语言快排
- C++ Primer 5e chapter 12
- C++ Primer 5e chapter 11
- C++ 与 c# 模块 之间相互调用