运算符重载(1).doc

上传人:大米 文档编号:563948462 上传时间:2023-12-06 格式:DOC 页数:7 大小:70.51KB
返回 下载 相关 举报
运算符重载(1).doc_第1页
第1页 / 共7页
运算符重载(1).doc_第2页
第2页 / 共7页
运算符重载(1).doc_第3页
第3页 / 共7页
运算符重载(1).doc_第4页
第4页 / 共7页
运算符重载(1).doc_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《运算符重载(1).doc》由会员分享,可在线阅读,更多相关《运算符重载(1).doc(7页珍藏版)》请在金锄头文库上搜索。

1、实验7 运算符重载(1)实验目的:1、理解什么是运算符重载;2、熟悉运算符函数的声明、定义、调用;3、掌握使用类的成员函数重载运算符方法;4、掌握使用友元函数重载运算符方法;5、熟悉算术运算符、关系运算符的重载方法;6、了解CTime等MFC类中的运算符重载情况。实验内容 1、复数是大家中学时期就学过的知识,设 a+bi 和 c+di 是两个复数,则它们的四则运规则如下: 请按下列步骤操作,体会什么是运算符重载,理解实现运算符使用的两种基本方法:(1) 复制下列代码到开发工具并加以运行,观察整数的+、-运算是否成功?#include using namespace std;class Comp

2、lexprivate:double real,image; /分别为实部、虚部public:Complex(double rel=0, double img=0)real=rel;image=img;void display()/输出(a+b*i) 、(a-b*i) 、(a)等形式cout (0) cout+image*i) ;/虚部为正else if (image0) coutimage*i) ;/虚部为负elsecout) ;/虚部为,即为实数/位置1;/位置2void main()int i1=100, i2=10, i3, i4;i3=i1+i2;i4=i1-i2;couti1+i2=

3、i3endl;couti1-i2=i4endl;/位置3(2) 复制下列代码到 位置3 处,再次编译、运行程序,观察复数的+、-运算是否可行?从中得出什么结论?试说明其中的原因。Complex c1(1,2), c2(3,-4),c3,c4; c3=c1+c2;c4=c1-c2;/输出加的结果c1.display();cout+;c2.display();cout=;c3.display(); coutendl; /输出减的结果c1.display();cout-;c2.display();cout=;c4.display (); coutendl;(3) 分别复制下列两段代码到 位置1和 位

4、置2 处,再次编译、运行程序,观察这次的复数+、-运算能否成功?再次得出什么结论?代码段1Complex operator +(Complex & c);/用成员函数重载friend Complex operator -(Complex & c1,Complex & c2);/用友元函数重载代码段2/成员函数的类外定义Complex Complex:operator +(Complex & c)Complex temp;temp.real=real+c.real;temp.image=image+c.image;return temp;/友元函数的定义Complex operator -(Co

5、mplex & c1,Complex & c2)Complex temp;temp.real=c1.real-c2.real;temp.image=c1.image-c2.image;return temp;(4)分析上述代码,结合小课ppt理解运算符函数的声明、定义、调用,熟悉运算符重载的两种基本方法:使用类成员函数和友元函数,注意它们之间参数的差异。 2、参照上一题的程序,掌握用类成员函数重载运算符的方法要求:在程序的适当位置填写程序代码,使用成员函数方法实现下列运算符重载:(1) 复数 + 实数(double) 运算;(2) 复数 * 复数 运算。程序代码:#include using

6、namespace std;class Complexprivate:double real,image; /分别为实部、虚部public:Complex(double rel=0, double img=0)real=rel;image=img;void display()/输出(a+b*i) 、(a-b*i) 、(a)等形式cout (0) cout+image*i) ;/虚部为正else if (image0) coutimage*i) ;/虚部为负elsecout) ;/虚部为,即为实数Complex operator +(Complex & c);/用成员函数重载;/成员函数的类外定

7、义Complex Complex:operator +(Complex & c)Complex temp;temp.real=real+c.real;temp.image=image+c.image;return temp;void main()Complex c1(1,2), c2(3,-4),c3,c4;c3=c1+123.456;c4=c1*c2; /输出加的结果c1.display();cout+;cout123.456;cout=;c3.display(); coutendl; /输出*的结果c1.display();cout*;c2.display();cout=;c4.displ

8、ay (); coutendl;3、参照上两题的程序,掌握用友元函数重载运算符的方法要求:在程序的适当位置填写程序代码,使用友元函数方法实现下列运算符重载:(1) 复数 / 实数(double) 运算;(2) 复数 = 复数 运算; (结果:int型,1表示“true”,0表示“false”)(3) 复数 != 复数 运算。(结果:int型,1表示“true”,0表示“false”)程序代码:#include using namespace std;class Complexprivate:double real,image; /分别为实部、虚部public:Complex(double re

9、l=0, double img=0)real=rel;image=img;void display()/输出(a+b*i) 、(a-b*i) 、(a)等形式cout (0) cout+image*i) ;/虚部为正else if (image0) coutimage*i) ;/虚部为负elsecout) ;/虚部为0,即为实数friend Complex operator -(Complex & c1,Complex & c2);/用友元函数重载;/友元函数的定义Complex operator -(Complex & c1,Complex & c2)Complex temp;temp.rea

10、l=c1.real-c2.real;temp.image=c1.image-c2.image;return temp;void main()Complex c1(10,9), c2(3,-4),c3;c3=c1/5; /输出除的结果c1.display();cout/;cout5;cout=;c3.display(); coutendl; /输出比较的结果coutc1=c2 ? 结果:;cout(c1=c2)endl;coutc1!=c2 ? 结果:;cout(c1!=c2)endl;问题:能否不调用display()成员函数,而是采用cout方式连续输出Complex呢?4、书上P256:10.4.2的第(1)题。5、在大名鼎鼎的MFC类中,除了包含数据成员、成员函数外,还有一项重要内容就是运算符重载,熟知这些内容对于完整理解MFC类的强大功能是很必要的,下图所示的就是CTime类的运算符重载情况:在vs2005VCatlmfcinclude 目录中包含有atltime.h和atltime.inl两个文件,其中就有运算符重载的声明、代码(lab_7目录中给出它们的简化版本)。请阅读这些文件内容,了解MFC类中的运算符重载是怎样实现的。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号