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)、输入>>和输出<< 操作符必须定义为友元函数。
七、总结:
到此,又是文章该结尾的时候了,如果能正确地使用操作符重载,将大大提高程序的直观性和可读性,同时降低程序崩溃的概率比,愿对你有益。
- C++【操作符重载】
- c++::操作符重载
- C++:操作符重载
- 操作符重载(C++)
- C++-重载操作符<< >> = + - * /
- c++_操作符重载
- 模板类中操作符重载问题("<<"和">>"重载)[c++]
- C++中重载操作符
- c++中 操作符重载
- C++中操作符重载
- C++ 中[]操作符重载
- c++中重载<<操作符
- C++中操作符重载
- C/C++: 操作符重载案例
- C++操作符重载专题(C++)
- 类型转换和操作符重载 (c#)
- C++——操作符重载
- 重载操作符 (c++primer 4e)
- 6.jsp总结
- Opencv绘制最小外接矩形、最小外接圆
- android 如何使用spinner来实现选择省份和市区功能
- RESTful 详解
- Linux makefile 学习笔记
- C++中操作符重载
- 区间DP 洛谷 P1799 数列
- 阿里云双十一活动,如何购买2U 4G 5M的云主机最划算 1500/年 4500/三年
- Unity中预编译 宏定义
- CodeForces 332B Maximum Absurdity
- dij算法
- numpy深入理解(2) indexing: integer array & boolean array
- 3311-数据结构实验之串三:KMP应用
- 购物车结算功能拦截器