C articles:GuruoftheWeek#4--ClassMechantics

2008-02-23 05:33:16来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

/*此文是译者出于自娱翻译的GotW(Guru of the Week)系列文章第3篇,原文的版权是属于Hub Sutter(着名的C 专家,"Exceptional C "的作者)。此文的翻译没有征得原作者的同意,只供学习讨论。——译者
*/


#4 类的结构(Class Mechanics)
难度:7.5/10

您对定义一个类牵涉到的具体细节熟悉多少?这次GotW不但讨论一些写一个类时很容易犯的错误,也要讨论怎样使您写的类具备专业风格.

问题:
假设您在看一段代码.其中包含如下一个类定义.这个类定义中有几处风格差劲,更有几处是的的确确的错误.您能够找到几处,该怎样修改?

class Complex {
public:
Complex( double real, double imaginary = 0 )
: _real(real), _imaginary(imaginary) {};

void operator ( Complex other ) {
_real = _real other._real;
_imaginary = _imaginary other._imaginary;
}

void operator<<( ostream os ) {
os << "(" << _real << "," << _imaginary << ")";
}

Complex operator () {
_real;
return *this;
}

Complex operator ( int ) {
Complex temp = *this;
_real;
return temp;
}

private:
double _real, _imaginary;
};

答案:


这个类定义中出现的需要修改或改进的地方远不止我们在下面要提到的几处.我们提出这个问题的目的主要是为了讨论类定义的构成(比如,"<<操作符的标准形式是什么样的"," 操作符是不是应该定义为成员函数?"),而不是讨论哪个接口的设计是不是太糟糕.但是,我还是想首先提一下属于后方面的建议,作为第0个值得修改的地方:

0.既然标准库中已有复数类为什么还要自己定义一个Complex类呢?(而且,标准库中定义的类不会有下面提及的任何一个问题,是由业界中具备多年经验的最优秀的人编写.还是谦虚一点去直接重用这些类吧)
[忠告]尽量直接使用用标准库算法.那会比您自己动手写一个要快捷,而且不易出错.


class Complex {
public:
Complex( double real, double imaginary = 0 )
: _real(real), _imaginary(imaginary) {};




标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: C articles:GuruoftheWeek#3:使用标准库

下一篇: 关于open()`不懂的地方。

热门词条
热门标签