- 1、本文档共78页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
c面向对像程序设计谭浩强
第4章 运算符重载
4.1 什么是运算符重载
4.2 运算符重载的方法
4.3 重载运算符的规则
4.4 运算符重载函数作为类成员函数和友元函数
4.5 重载双目运算符
4.6 重载单目运算符
4.7 重载流插入运算符和流提取运算符
4.8 不同类型数据间的转换
4.1 什么是运算符重载
所谓重载,就是重新赋予新的含义?函数重载就是对一个已有的函数赋予新的含义,使之实现新功能?
运算符也可以重载?实际上,我们已经在不知不觉之中使用了运算符重载?
现在要讨论的问题是: 用户能否根据自己的需要对C++已提供的运算符进行重载,赋予它们新的含义,使之一名多用?譬如,能否用“+”号进行两个复数的相加?在C++中不能在程序中直接用运算符“+”对复数进行相加运算?用户必须自己设法实现复数相加?例如用户可以通过定义一个专门的函数来实现复数相加?见例4.1?
例4.1 通过函数来实现复数相加?
#include iostream
using namespace std;
class Complex //定义Complex类
{
public:
Complex( ){real=0;imag=0;} //定义构造函数
Complex(double r,double i){real=r;imag=i;} //构造函数重载
Complex complex_add(Complex c2); //声明复数相加函数
void display( ); //声明输出函数
private:
double real; //实部
double imag; //虚部
};
Complex Complex∷complex_add(Complex c2)
{
Complex c;
c.real=real+c2.real;
c.imag=imag+c2.imag;
return c;
}
void Complex∷display( ) //定义输出函数
{
cout(real,imagi)endl;
}
int main( )
{
Complex c1(3,4),c2(5,-4),c3;//定义3个复数对象
c3=plex_add(c2); //调用复数相加函数
coutc1=; c1.display( );//输出c1的值
coutc2=; c2.display( );//输出c2的值
coutc1+c2=; c3.display( );//输出c3的值
return 0;
}
运行结果如下:
c1=(3+4i)
c2=(5-4i)
c1+c2=(8,-6i)
结果无疑是正确的,但调用方式不直观?太烦琐,使人感到很不方便?能否也和整数的加法运算一样,直接用加号“+”来实现复数运算呢?如
c3=c1+c2;
编译系统就会自动完成c1和c2两个复数相加的运算?如果能做到,就为对象的运算提供了很大的方便?这就需要对运算符“+”进行重载?
4.2 运算符重载的方法
运算符重载的方法是定义一个重载运算符的函数,在需要执行被重载的运算符时,系统就自动调用该函数,以实现相应的运算?也就是说,运算符重载是通过定义函数实现的?运算符重载实质上是函数的重载?
重载运算符的函数一般格式如下:
函数类型 operator 运算符名称 (形参表列)
{
对运算符的重载处理
}
例如,想将“+”用于Complex类(复数)的加法运算,函数的原型可以是这样的:
Complex operator+ (Complex c1,Complex c2);
在定义了重载运算符的函数后,可以说: 函数operator+重载了运算符+?
为了说明在运算符重载后,执行表达式就是调用函数的过程,可以把两个整数相加也想像为调用下面的函数:
int operator + (int a, int b)
{
return (a+b);
}
如果有表达式5+8,就调用此函数,将5和8作为调用函数时的实参,函数的返回值为13?这就是用函数的方法理解运算符?
可以在例4.1程序的基础上重载运算符“+”,使之用于复数相加?
例4.2 改写例4.1,重载运算符“+”,使之能用于两个复数相加?
#include iostream
using namespace std;
class Complex
{
public:
Complex( ){real=0;imag=0;}
Complex(double r,double i){real=r;imag=i;}
Complex operator+(Complex c2);//声明重载运算符的函数
void display( );
private:
double real;
double imag;
};
Complex Complex∷opera
您可能关注的文档
- 2013版人教新目标八年级英语上册单词电子表格.xls
- 2013年黑龙江省哈尔滨市工大附中中考英语模拟试卷(笔试部分).doc
- 2013版高考英语 专题强化测评(十一)状语从句.doc
- 2013研究生英语二真题.doc
- 2013级硕士研究生高等选矿学学习资料.doc
- 2013翻译真题词汇互译精编.doc
- 2013级数学经济创新班专业教学计划进度表(18学期).xls
- 2013英语二打印版有详细答案.doc
- 2013译林牛津英语七年级下册期末考试.doc
- 2013高三一轮复习超级课件_Unit4《Body_language》(新人教版必修4).ppt
- 2024高考物理一轮复习规范演练7共点力的平衡含解析新人教版.doc
- 高中语文第5课苏轼词两首学案3新人教版必修4.doc
- 2024_2025学年高中英语课时分层作业9Unit3LifeinthefutureSectionⅢⅣ含解析新人教版必修5.doc
- 2024_2025学年新教材高中英语模块素养检测含解析译林版必修第一册.doc
- 2024_2025学年新教材高中英语单元综合检测5含解析外研版选择性必修第一册.doc
- 2024高考政治一轮复习第1单元生活与消费第三课多彩的消费练习含解析新人教版必修1.doc
- 2024_2025学年新教材高中英语WELCOMEUNITSectionⅡReadingandThi.doc
- 2024_2025学年高中历史专题九当今世界政治格局的多极化趋势测评含解析人民版必修1.docx
- 2024高考生物一轮复习第9单元生物与环境第29讲生态系统的结构和功能教案.docx
- 2024_2025学年新教材高中英语UNIT5LANGUAGESAROUNDTHEWORLDSect.doc
文档评论(0)