收藏 分销(赏)

运算符重载(1).doc

上传人:xrp****65 文档编号:7421783 上传时间:2025-01-03 格式:DOC 页数:7 大小:70.50KB
下载 相关 举报
运算符重载(1).doc_第1页
第1页 / 共7页
运算符重载(1).doc_第2页
第2页 / 共7页
点击查看更多>>
资源描述
实验7 运算符重载(1) 实验目的: 1、理解什么是运算符重载; 2、熟悉运算符函数的声明、定义、调用; 3、掌握使用类的成员函数重载运算符方法; 4、掌握使用友元函数重载运算符方法; 5、熟悉算术运算符、关系运算符的重载方法; 6、了解CTime等MFC类中的运算符重载情况。 实验内容 1、复数是大家中学时期就学过的知识,设 a+bi 和 c+di 是两个复数,则它们的四则运规则如下: 请按下列步骤操作,体会什么是运算符重载,理解实现运算符使用的两种基本方法: (1) 复制下列代码到开发工具并加以运行,观察整数的+、-运算是否成功? #include <iostream> using namespace std; class Complex { private: 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<<" ("<<real; if (image>0) cout<<"+"<<image<<"*i) "; //虚部为正 else if (image<0) cout<<image<<"*i) "; //虚部为负 else cout<<") "; //虚部为,即为实数 } //位置1 }; //位置2 void main() { int i1=100, i2=10, i3, i4; i3=i1+i2; i4=i1-i2; cout<<"i1+i2="<<i3<<endl; cout<<"i1-i2="<<i4<<endl; //位置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(); cout<<endl; //输出减的结果 c1.display(); cout<<"-"; c2.display(); cout<<"="; c4.display (); cout<<endl; (3) 分别复制下列两段代码到 位置1和 位置2 处,再次编译、运行程序,观察这次的复数+、-运算能否成功?再次得出什么结论? 代码段1 Complex 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 -(Complex & 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 <iostream> using namespace std; class Complex { private: 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<<" ("<<real; if (image>0) cout<<"+"<<image<<"*i) "; //虚部为正 else if (image<0) cout<<image<<"*i) "; //虚部为负 else cout<<") "; //虚部为,即为实数 } Complex operator +(Complex & c); //用成员函数重载 }; //成员函数的类外定义 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<<"+"; cout<<123.456; cout<<"="; c3.display(); cout<<endl; //输出*的结果 c1.display(); cout<<"*"; c2.display(); cout<<"="; c4.display (); cout<<endl; } 3、参照上两题的程序,掌握用友元函数重载运算符的方法 要求:在程序的适当位置填写程序代码,使用友元函数方法实现下列运算符重载: (1) 复数 / 实数(double) 运算; (2) 复数 == 复数 运算; (结果:int型,1表示“true”,0表示“false”) (3) 复数 != 复数 运算。(结果:int型,1表示“true”,0表示“false”) 程序代码: #include <iostream> using namespace std; class Complex { private: 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<<" ("<<real; if (image>0) cout<<"+"<<image<<"*i) "; //虚部为正 else if (image<0) cout<<image<<"*i) "; //虚部为负 else cout<<") "; //虚部为0,即为实数 } friend Complex operator -(Complex & c1,Complex & c2);//用友元函数重载 }; //友元函数的定义 Complex operator -(Complex & c1,Complex & c2) { Complex temp; temp.real=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<<"/"; cout<<5; cout<<"="; c3.display(); cout<<endl; //输出比较的结果 cout<<"c1==c2 ? 结果:"; cout<<(c1==c2)<<endl; cout<<"c1!=c2 ? 结果:"; cout<<(c1!=c2)<<endl; } 问题:能否不调用display()成员函数,而是采用cout<<…<<…<<…方式连续输出Complex呢? 4、书上P256:10.4.2的第(1)题。 5、在大名鼎鼎的MFC类中,除了包含数据成员、成员函数外,还有一项重要内容就是运算符重载,熟知这些内容对于完整理解MFC类的强大功能是很必要的,下图所示的就是CTime类的运算符重载情况: 在vs2005\VC\atlmfc\include 目录中包含有atltime.h和atltime.inl两个文件,其中就有运算符重载的声明、代码(lab_7目录中给出它们的简化版本)。请阅读这些文件内容,了解MFC类中的运算符重载是怎样实现的。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 应用文书 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服