面向对象程序设计语言C第05章运算符重载

面向对象程序设计语言C第05章运算符重载

ID:38816083

大小:1.21 MB

页数:79页

时间:2019-06-19

面向对象程序设计语言C第05章运算符重载_第1页
面向对象程序设计语言C第05章运算符重载_第2页
面向对象程序设计语言C第05章运算符重载_第3页
面向对象程序设计语言C第05章运算符重载_第4页
面向对象程序设计语言C第05章运算符重载_第5页
资源描述:

《面向对象程序设计语言C第05章运算符重载》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、面向对象程序设计语言C++电子科技大学计算机学院1第五章运算符重载当在使用一种程序设计语言编写程序时,我们不仅要设计新的数据类型,同时还要为新类型设计运算。一般地,用户定义类型的运算都是用函数的方式实现的。而在一般情况下,一种类型的运算都是用运算符表达的,这很直观,语义也简单。但是如果直接将运算符作用在用户定义类型之上,那么编译器将不能识别运算符的语义。因此,在这种情况下,我们需要一种特别的机制来重新定义作用在用户定义类型上的普通运算符的含义。这就是运算符重载的简单概念。2第五章运算符重载其实在C编译器里早就存在简单的运算符重载的概念了。考虑整型和浮点型两种加法运算:i

2、nta=1,b;b=a+2;floatc=1.0,d;d=c+2.0;在上面的两条加法语句中,都用到了运算符“+”。这符合我们数学常识。但对于C编译器来说,这两个加法却被翻译成不同的指令。这就是说,“+”运算符至少具有两种不同的解释(实现代码)。此时我们说,“+”运算符被重载了。遗憾的是,C仅支持很少量的运算符重载。3第五章运算符重载C++扩充了C运算符重载的功能,允许已存在的预定义运算符在不同的上下文中做出不同的解释。当两个字符串类进行连接的时候,我们可能用到这样的方式:classString{…public:Stringstring_cat(String);…};S

3、tringstr1,str2,str3;str3=str1.string_cat(str2);4第五章运算符重载显然,这不如str3=str1+str2简单明了。但问题是,C++编译器只知道+运算符是作用在整型和浮点型数据之上的,它不知道在上述表达式中+运算符的确切含义。因此,在设计类String时,我们必须增加“+”运算符的含义。这样一来,语义变得更加清晰和易懂。5第五章引论在原来预定义的运算符含义的基础上,再增加对于某个用户定义类型的对象进行操作的新的含义。这就是运算符重载。运算符重载后,其优先级和结合性不变。6第五章引论考虑复数的加法运算:classComplex

4、{doublere,im;public:Complex(doubler,doubleim){re=r;im=i;}Complex(){re=0.0;im=0.0;}Complexadd_Complex(Complexc){Complextemp;temp.re=re+c.re;temp.im=im+c.im;returntemp;}};7//整个函数体也可简化为returnComplex(re+c.re,im+c.im);第五章引论voidmain(){Complexobj1(1,2),obj2(3,4);Complexobj3=obj1.add_Complex(obj

5、2);…}能不能将2个复数相加表示为:obj1+obj2呢?9第五章引论5.1重载运算符C++提供了一种将标准定义的运算符用在用户自定义类型上的方法,称为运算符重载。C++约定,如果一个成员函数的函数名字是特殊的,即由关键字operator加上一个运算符构成,如operator+。obj1.operator+(obj2)称为函数operator+()的显示调用形式;obj1+obj2称为函数operator+()的隐式调用形式;函数operator+()称为运算符重载函数。10第五章引论考虑复数的加法运算:classComplex{doublere,im;public:

6、Complex(doubler,doubleim){re=r;im=i;}Complex(){re=0.0;im=0.0;}Complexoperator+(Complexc){Complextemp;temp.re=re+c.re;temp.im=im+c.im;returntemp;}};11第五章引论5.1重载运算符voidmain(){Complexobj1(1,2),obj2(3,4);Complexobj3=obj1.+obj2;…}obj1+obj2等价于:obj1.operator+(obj2)12第五章引论5.1.1运算符重载的语法形式在C++中,运算

7、符通过一个运算符重载函数进行重载。运算符重载可以采用成员函数和友元函数两种重载方式,语法形式如下:(1)运算符重载函数为成员函数的语法形式为:typeClass_Name::operator@(参数表){//相对于Class_Name类而定义的操作}其中,type是返回类型,“@”是要重载的运算符符号,Class_Name是重载该运算符的类的类名,函数名operator@。13第五章引论5.1.1运算符重载的语法形式(2)运算符重载函数为友元函数的语法形式为:typeoperator@(参数表){//相对于该类而定义的操作}14第五章引论

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。