条款3-4:绝对不要以多态的方式处理数组与default constructor
来源:互联网 发布:oracle数据库linux安装 编辑:程序博客网 时间:2024/06/06 18:12
条款3:绝对不要以多态的方式处理数组
class BST{ ...... };
class BalancedBST:public BST{.......};
void printBST(ostream& s,const BST array[ ],int num)
{
for(int i = 0;i<num;i++)
s<<array[i];
}
当你传入BST的数组是没有什么问题的。
现在传入BalanceBST呢?
BalanceBST bBST[10];
printBST(cout,bBST,10);
编译器会毫无怨言的接受,但是我们看看这个循环
for(int i = 0;i<num;++i)
s<<array[i];
我们知道array与array[i]之间的距离为i*sizeof(BST),所以编译器每次都是这样移动的。现在我们传入了派生类的对象,那么sizeof(BalanceBST)与sizeof(BST)不一定相等。所以array[i]移动的距离也不一定相等。
同样你用一个指向base的指针删除一个指向派生类的数组,也是有可能出现错误的。
条款4:非必要不提供default constructor
所谓default constructor是否提供的问题有很大的争论。有些对象提供default constructor 构造出来的对象是没任何意义的,但是如果没有,对于定义数组对象又不方便。假如添加了default constructor那么每次都要检查是否有效,对程序的效率造成影响。本条款的意思是非必要就不提供default constructor了。
- 条款3-4:绝对不要以多态的方式处理数组与default constructor
- 条款3:绝对不要以多态方式处理数组
- 条款三:绝对不要以多态的方式处理数组
- 条款3:绝对不要以多态(polymorphically)方式处理数组
- 读《More Effective C++35个改善编程与设计的有效方法》之条款3:绝对不要以多态方式处理数组
- 3.绝对不要以多态方式处理数组
- 绝对不要以多态方式处理数组(More Effective c++)
- c++ 不要以多态的方式处理数组
- 不要以多态的方式处理数组
- 不要以多态的方式处理数组(More Effective-C++_3(基础))
- 《More effective C++》 中条款三 不要用多态方式处理数组以及数组的析构
- 条款4:非必要不提供default constructor
- 条款4:非必要不提供default constructor
- 不要用多态方式处理数组以及数组的析构
- 以多态的方式处理数组 产生的问题 实例代码
- c++的“default constructor”
- Default Constructor的建构操作
- default constructor 的构造函数
- 英语词汇4
- Make Ubuntu12.04 become Mac Lion
- AchartEngine 统计图表开发总结
- 原型模式浅复制和深复制
- 从奇异值分解(SVD)看潜在语义索引(LSI)
- 条款3-4:绝对不要以多态的方式处理数组与default constructor
- Firworks 8之旅(一)使用橡皮擦工具将图像擦除并填色
- C++程序员必看书单
- ActionScript 3 : Get a Class Reference by Class Name
- 图像UIVIEW的旋转
- LSI (Latent Semantic Indexing)隐语义索引简介
- synchronized 详解
- myBatis入门
- win7和ubuntu双系统安装