主题:【注意】道歉--刀耕火种的繁荣时代 的连接上次给错了 -- 柚子
首先谢谢回贴,有讨论才能有进步,沙龙永远胜过一言堂。
>void setValue(const int v){value=v;}
>
>C/C++是Pass-by-value,所以对于简单数据类型的传值,const是不必要的。
>一般在传一个reference或pointer的Input parameter使用const,来避免其内容被函数修改。
这点非常同意,实际上应该是这样的:
TypeResult function(const TypeClass& v){ //pass const reference to avoid temp copy ctor
value=TypeClass(v); //保护性copy,防止v是一个cracker恶意继承自TypeClass的类
}
对于上述setValue,本质希望能够直接对比到ANSI C的实现上,如果涉及保护性copy,和pass by reference
及pass by value,这些language-level的特性,并不是OO的特性,也无法和ANSI C的实现对比了。
>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关系,所以不能使用继承。[cchere.com 西西河 无> 斋主人]
>因为多一个Z-坐标,2D point和3D point只能视作两个独立的class,或许实现上3D point class可以composite 2D >point class.
>Scott Meyers在他的Effective C++有一个Item(记不清是具体哪个Item了)是专门解释这一点了。记得他老人家举> 的例子是,矩形和正方形之间不存在继承关系。
关于inheritance和compose,这个也是最近OO中特别强调的一点。例子很多,事实上在某些极端的情况下比如Java, 只有interface可以被implement,而不主张继承任何非抽象类。总之,的确继承在前些年被滥用了,更多的情况下
应该是compose,但是如果你仔细读我的ANSI C代码,就会发现,使用ANSI C实现继承时,只有一个办法——就是 compose,sub struct HAS_A base struct data section。
严格说,按照OO思想,如果采用C++或者JAVA这个继承体系如下:
template<class T>
class point{
public:
virtual const T& getCoordinate(int demension) = 0;
virtual double radius() = 0;
};
tempalte<int n, class T = int>
class pointX: public point<T>{
public:
const T& getCoordinate(int demension){
if(demension < 0 || demension > n)
throw std::runtime_error("out of demension");
return coordinates[n];
}
double radius(){
for(int i=0, res=0; i<n; ++i)
res+=coordinates[i]*coordinates[i]
return sqrt(res);
}
private:
T[n] coordinates;
};
typedef piontX<2> point2D;
typedef pointX<3> point3D;
class colored_point:public point2D{
//...
};
>3)Thread这个例子有个明显问题,
>queue_不是thread safe的,对queue_的操作应要加上Mutex或其他类似的东东加以保护。
这个我觉得你没有理解我的意思,我是在不支持多线程的机器上实现多线程,例如在MS-DOS上,
只有我一个process一个task,哪里有同步的问题呢?
- 相关回复 上下关系7
【注意】道歉--刀耕火种的繁荣时代 的连接上次给错了 柚子 字19619 2006-03-11 03:53:47
【讨论】几个商榷的地方 无斋主人 字1131 2006-03-13 19:32:25
谢谢回贴
这次又被我逮住小两口共用一个ID的证据了 wsxx 字47 2006-03-14 04:04:47
🙂hehe ,抱歉拉,以后我就不做二传手了。 柚子 字0 2006-03-14 04:25:28
没有关系的啦 wsxx 字20 2006-03-14 04:41:35
🙂那就要看各位的魅力了。 柚子 字26 2006-03-14 08:09:46