西西河

主题:【注意】道歉--刀耕火种的繁荣时代 的连接上次给错了 -- 柚子

全看分页树展 · 主题 跟帖
家园 【讨论】几个商榷的地方

1)

void setValue(const int v){value=v;}

C/C++是Pass-by-value,所以对于简单数据类型的传值,const是不必要的。

一般在传一个reference或pointer的Input parameter使用const,来避免其内容被函数修改。

2)Point和Point3D之间不存在继承关系。(而Point和color_point之间存在继承关系)。

C++的继承关系是严格的IS_A关系,也就是说,Derived class必须拥有base class的所有public和protected属性和method。Base class的public virtual function可视作derived class的一个default implementation。(在base class无法缺省实现时,则常为pure virtual function),显然因为3D的Point多了一个z坐标,彻底改变了2维点的物理意义,两者没有这种IS_A关系。严格来说这更像一个Has-A关系。

虽然数学上两者有紧密联系,而在C++中因为不是严格的IS_A关系,所以不能使用继承。

因为多一个Z-坐标,2D point和3D point只能视作两个独立的class,或许实现上3D point class可以composite 2D point class.

Scott Meyers在他的Effective C++有一个Item(记不清是具体哪个Item了)是专门解释这一点了。记得他老人家举的例子是,矩形和正方形之间不存在继承关系。

3)Thread这个例子有个明显问题,

queue_不是thread safe的,对queue_的操作应要加上Mutex或其他类似的东东加以保护。

全看分页树展 · 主题 跟帖


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河