版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C+语言程序设计教程第9章多态性第9章 多态性9.2运算符重载C+语言程序设计教程将C+已有的运算符作用于自定义的类的行为,这种机制称为运算符重载。9.2.1 运算符重载机制C+编译器在对运算符进行编译处理时,将一个运算符编译成如下形式:第9章多态性其中,关键字operator 加上运算符名的函数称为运算符函数一元运算符:obj编译成operator (obj)二元运算符:obj1obj2编译成operator (obj1,obj2)C+语言程序设计教程9.2.4 重载为类的成员函数将运算符函数重载为类的成员函数, 这样运算函数可以自由地访问本类的数据成员。重载运算符函数为类的成员函数语法形式
2、为: 类名是要重载该运算符的类,如果在类中定义运算符函数,类名与作用域分辨符可以省略;。 operator与运算符构成运算符函数名;第9章当运算符重载为类的成员函数时,函数的参数个数将比原来的操作数个数要少一个;原因是通过对象调用该运算符函数时,对象本身充当了运算符函数最左边的操作数,少了的操作数就是该对象本身。因此双目运算符重载为类的成员多态性函数时,函数只显式说明一个参数,该形参是运算符的右操作数。返回类型 类名:operator 运算符(形参表)函数体;C+语言程序设计教程9.2.4 重载为类的成员函数【例9-2】重载运算符进行复数类数据运算第9章多态性12345678910111213
3、1415161718192021222324252627/* p9_2.cpp* 重载+、-、+为类的成员函数,进行复数运算*/ #includeusing namespace std;class Complex/复数类定义private:double real;/复数实部double image;/复数虚部public:Complex(double real=0.0,double image=0.0) /构造函数this-real=real,this-image=image;void display()cout(real,image)endl;Complex operator + (Comp
4、lex B);/运算符+重载成员函数Complex operator - (Complex B);/运算符-重载成员函数Complex operator - ();/运算符-(取负)重载成员函数Complex operator + ();/前置+重载成员函数Complex operator + (int);/后置+重载成员函数;9.2.4 重载为类的成员函数C+语言程序设计教程第9章多态性29303132333435363738394041424344454647484951525354555657585960616263646566Complex Complex:operator +(Com
5、plex B)/重载运算符+的函数实现return Complex(real+B.real, image+B.image); /创建一个临时对象作为返回值Complex Complex:operator -(Complex B)/重载运算符-的函数实现return Complex(real-B.real, image-B.image);Complex Complex:operator -()/重载运算符-(取负)的函数实现return Complex(-real,-image);Complex Complex:operator +()/重载运算符前置+的函数实现return Complex(+
6、real,image);Complex Complex:operator +(int)/重载运算符后置+的函数实现return Complex(real+,image);int main()Complex A(100.0,200.0),B(-10.0,20.0),C;coutA=,A.display();coutB=,B.display();运行结果C=A+B;/使用重载运算符完成复数加法coutC=A+B=,C.display();C=A-B;/使用重载运算符完成复数减法coutC=A-B=,C.display();C=-A+B;coutC=-A+B=,C.display(); C=A+;c
7、outC=A+, C=, C.display(); C=+A;coutC=+A, C=, C.display(); C=A+5;C.display(); return 0; A=(100,200) B=(-10,20)C=A+B=(90,220) C=A-B=(110,180) C=-A+B=(-110,-180) C=A+, C=(100,200) C=+A, C=(102,200) (107,200)9.2.4 重载为类的成员函数C+语言程序设计教程程序解释: 程序中,除了在运算符函数定义及实现的时候使用了关键字operator与运算符外,运算符成员函数与类的普通成员函数没有什么区别。执行
8、程序64行C=A+5时,C=A+5编译成调用形式C=A.operator + (5), 将5当成复数(5,0)与复数对象A相加。第9章多态性9.2.5 典型运算符重载1. 重载复数赋值=运算【例9-3】重载运算符=为类的成员函数进行复数类数据赋值分析:=是一个二元运算符,A=B被编译成operator = (A, B), 其中A应是一个左值。C+语言程序设计教程第9章多态性123456789101112131415161718192021222324/* p9_3.cpp* 重载=为类的成员函数,进行复数赋值*/ #includeusing namespace std;class Comple
9、x/复数类定义private:double real;/复数实部double image;/复数虚部public:Complex(double real=0.0,double image=0.0) /构造函数this-real=real, this-image=image;void display()cout(real,image)endl;Complex operator + (Complex B);/运算符+重载成员函数Complex operator = (Complex B);/运算符=重载成员函数;1. 重载复数赋值=运算C+语言程序设计教程第9章多态性运行结果:A=(100,200
10、)B=(-10,20)operator = calling. C=A+B=(90,220)operator = calling. C=A=(100, 200)252627282930313233343536373839404142434445Complex Complex:operator +(Complex B)/重载运算符+的函数实现return Complex(real+B.real, image+B.image); /创建一个临时对象作为返回值Complex Complex:operator =(Complex B)/重载运算符=的函数实现real=B.real, image=B.im
11、age; coutoperator = calling.endl;return *this;/return Complex(real,image);int main()Complex A(100.0,200.0),B(-10.0,20.0),C;coutA=,A.display();coutB=,B.display();C=A+B;/使用重载运算符完成复数加法coutC=A+B=,C.display();C=A;coutC=A=,C.display(); return 0;3. 重载下标运算符 【例9-5】重载下标运算符 为类的成员函数分析:下标运算符 的操作对象有两个,左边是一个对象指针,中
12、间是一个作为下标的整型数。因此, 作为二元运算符重载。下面重载下标运算符,使之能够按下标访问字符串中指定位置字符C+语言程序设计教程第9章多态性2567891011121314151617181920212223242526272829/p9_5.cpp #include using namespace std; class Stringprivate:char *Str;int len;public:void ShowStr()coutstring:Str,length:lenendl;String(const char *p=NULL)if (p)len=strlen(p); Str=ne
13、w charlen+1; strcpy(Str,p); elselen=0;Str=NULL;3.重载下标运算符 C+语言程序设计教程第9章多态性运行结果:string: 0123456789abcdef,length: 16 S110=Astring: 0123456789Abcdef,length: 16S210=K30313233343536373839404142434445464748495051525354String()if (Str!=NULL)delete Str;char &operator(int n)/重载运算符, 处理String对象return *(Str+n);const char &operator(int
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026新疆天筑建工集团有限公司社会化招聘121人备考题库带答案详解(夺分金卷)
- 2026四川宜宾珙县总工会第一次招聘社会化工会工作者1人备考题库及完整答案详解【典优】
- 2026广东广州花都城投住宅建设有限公司第二次招聘项目用工人员4人备考题库含答案详解ab卷
- 2025-2026山东临沂市鲁南技师学院第二学期临时代课教师招聘1人备考题库(二)【全优】附答案详解
- 2025-2026山东临沂市鲁南技师学院第二学期临时代课教师招聘1人备考题库(二)必考题附答案详解
- 2026重庆青年镇招聘公益性岗位人员4人备考题库【综合卷】附答案详解
- 2025-2026学年外研版七年级英语下册Unit 4 Understanding Ideas读说课第二课时教学设计
- 2026年天津城市建设管理职业技术学院单招职业适应性测试题库含答案详细解析
- 2026年漳州职业技术学院单招综合素质考试题库含答案详细解析
- 2026年工程风险新闻出版监管服务合同
- 2025年机关事业单位工勤技能岗位等级考核试题机关工勤等级考试附答案
- 2025年湖北省烟草专卖局(公司)招聘206人笔试参考题库附带答案详解
- 2025年安徽省综合类事业单位招聘考试公共基础知识真题试卷及参考答案
- 生活垃圾收集人员培训管理方案
- 薪资核定及管理办法
- 劳动课自制沙拉课件
- 药膳养生鸡汤培训课件
- 监狱辅警面试题目及答案
- 十五五特殊教育发展提升行动计划
- 医院运营数据统计分析
- 2025至2030年中国氟化液行业市场运行态势及产业趋势研判报告
评论
0/150
提交评论