C++中操作符重载

来源:互联网 发布:淘宝网怎么用微信支付 编辑:程序博客网 时间:2024/04/19 05:56

一、操作符重载属于什么?

在本文开始阐述之前,首先明确,操作符重载是一个具有特殊名的“ 函数 ”。 既然作为函数,那么,就具有函数的特性,一是形参表,二是返回值。 关键字operator后接需要定义的操作符。

二、函数形式:

返回类型 operator 操作符(参数列表)

说明:参数列表中,参数的个数取决于重载运算符的操作数个数。
如:+ (加法)就必须有两个操作数。C=A+B;

三、举个栗子:实现两个复数的加法

1。图示说明:

图一

class Complex{ public:     Complex(double real,double image)                :_real(real)                ,_image(image)     {        }//思路一:构造函数实现,将两个操作数分别传给函数,进行相加减,如下:Add(const Complex& c1,const Complex& c2){}//很快你就会发现,在构造函数中,有一个隐藏得this 指针,这样的话,就相当于有三个操作数了。程序错误。//思路二:去掉一个参数,返回相应类的引用。如下:Complex& Add(const Complex& c){   _real+=c._real;//这里_real相当于this->_real;   _image+=c._image;   return ;}//走到这里,你又会发现,就算参数少了一个,但是不管是返回this还是返回c,都会使c1,c2的值发生变化//思路三:这时候,也许你就会想到,返回引用会使值发生变化,那么返回值,而不是返回引用,是不是这问题就解决了呢?Complex Add(const Complex& c ){    complex temp(*this);    temp._real+=c._real;    temp._image+=c._image;    return 0;} };//相应的主函数如下:int main (){    Complex c1(1.0,2.0);    Complex c2(3.0,4.0);    Complex c3(C1.Add(c2));    return 0;}

使用思路三的方法,毫无疑问可以得到我们想要的结果,可是,对于加法这种一目了然的操作,倘若写成:Complex c3(C1.Add(c2))这样的代码,程序的可读性是不是也太挫了些,不如c3=c1+c2这样来的直观。既然这样,就该今天的主角出场了:

加法运算符重载:

  //还是在上述所在的类中  Complex operater +(const Complex& c)  {      complex temp(*this);      temp._real+=c._real;      temp._image+=c._image;//在该函数中,将运算符+重载,在主函数中便可使用c1+c2这样的表达式。

四、不能重载的操作符有哪些?

(1)、 (. 成员选择符)
(2)、(.* 成员对象选择符)
(3)、(::域解析操作符)
(4)、(?:条件选择符)
(5)、(sizeof 求字节运算符)
除了=(赋值运算符)以外,基类被重载的操作符都将被派生类继承

五、能够重载的操作符有哪些?

除了上述5个不能被重载的操作符外,剩下的操作符基本都能被重载。

六、注意“事项:

(1)、不能通过其他符号来创建新的操作符
如:operator @;
void operator @() {}
(2)、重载操作符的参数必须有一个类类型或者枚举类型的操作数,

//如:int operator + (const int _num1,const _num2 )//错误{}

(3)、用于内置类型的操作符,其含义不能变。
如:内置类型的整型+ ,不能改变其含义
(4)、不具备短求值的特性,重载操作符不能保证操作符的求值顺序,在重载&&和||时,对每个操作数都要进行求值,且对操作数的求值顺序不能做规定
(5)、作为成员函数的重载函数,其参数看起来比它的操作数少一个
(因为隐含一个默认的操作数this )
(6)、一般算数操作符定义为非成员函数,将赋值运算符定义为成员函数
(7)、操作符定义为非类的成员函数时,一般将其定义为友元
(8)、==和!=一般要成对重载。
(9)、自增自减操作符:前置时必须返回被增量(被减量)的引用;后置时,必须返回值
(10)、输入>>和输出<< 操作符必须定义为友元函数。

七、总结:

到此,又是文章该结尾的时候了,如果能正确地使用操作符重载,将大大提高程序的直观性和可读性,同时降低程序崩溃的概率比,愿对你有益。

原创粉丝点击