运算符重载(1)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验7 运算符重载(1)
实验目的:
1、理解什么是运算符重载;
2、熟悉运算符函数的声明、定义、调用;
3、掌握使用类的成员函数重载运算符方法;
4、掌握使用友元函数重载运算符方法;
5、熟悉算术运算符、关系运算符的重载方法;
6、了解CTime等MFC类中的运算符重载情况。
实验内容
1、复数是大家中学时期就学过的知识,设a+bi 和c+di 是两个复数,则它们的四则运规则如下:
请按下列步骤操作,体会什么是运算符重载,理解实现运算符使用的两种基本方法:
(1) 复制下列代码到开发工具并加以运行,观察整数的+、-运算是否成功?
#include
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<<" ("< if (image>0) cout<<"+"< else if (image<0) cout< else cout<<") "; //虚部为,即为实数} //位置1 }; //位置2 void main() { int i1=100, i2=10, i3, i4; i3=i1+i2; i4=i1-i2; cout<<"i1+i2="< cout<<"i1-i2="< //位置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< //输出减的结果 c1.display(); cout<<"-"; c2.display(); cout<<"="; c4.display (); cout< (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 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<<" ("< if (image>0) cout<<"+"< else if (image<0) cout< 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;