实验四运算符重载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
成都学院
实验报告
课程名称C++面向对象程序设计实验名称实验4 运算符重载姓名
班级
学号
指导教师
设计时间2016年5月16日
1.实验目的
1) 进一步了解运算符的概念和使用方法。
2) 掌握几种常用的运算符重载的方法。
3) 了解转换构造函数的使用方法。
4) 了解在Visual C++6.0 环境下进行运算符重载要注意的问题。
1.实验内容
1) 声明一个复数Complex,重载运算符“+”,“-”,“/”,“*”,使之能用于复数的加减乘除
运算,运算符重载函数作为Complex类的成员函数。编写程序,分别求两个复数之和、差、积和商。思考:编写的程序能否用于一个整数与一个复数的算术运算。
#include
using namespace std;
class Complex
{
public:
Complex(){real=0;imag=0;}
Complex(double r,double i){real=r;imag=i;}
Complex operator +(Complex &c2);
Complex operator -(Complex &c2);
Complex operator *(Complex &c2);
Complex operator /(Complex &c2);
void display();
private:
double real;
double imag;
};
Complex Complex::operator+(Complex &c2)
{
Complex c;
c.real=real+c2.real;
c.imag=imag+c2.imag;
return c;
}
Complex Complex::operator-(Complex &c2)
{
Complex c;
c.real=real-c2.real;
c.imag=imag-c2.imag;
return c;
}
Complex Complex::operator*(Complex &c2)
{
Complex c;
c.real=real*c2.real-imag*c2.imag;
c.imag=imag*c2.real+real*c2.imag;
return c;
}
Complex Complex::operator/(Complex &c2)
{
Complex c;
c.real = (real*c2.real + imag*c2.imag)/(c2.real*c2.real + c2.imag*c2.imag);
c.imag = (imag*c2.real - real*c2.imag)/(c2.real*c2.real + c2.imag*c2.imag);
return c;
}
void Complex::display()
{
if(imag<0)
cout<<"("< else cout<<"("< } int main() { Complex c1(3,4), c2(5,-10), c3; c3=c1+c2; c3.display(); c3=c1-c2; c3.display(); c3=c1*c2; c3.display(); c3=c1/c2; c3.display(); return 0; 该程序不能用于用于一个整数与一个复数的算术运算。 显示:错误error C2679: 二进制“+”: 没有找到接受“int”类型的右操作数的运算符(或没有可接受的转换) 2) 声明一个复数Complex,重载运算符“+”,使之能用于复数的加法运算。参加运算的两 个运算量可以都是类对象,也可以有一个整数,顺序任意。列如:c1+c2,i+c1,c1+i均合法。 #include using namespace std; class Complex { public: Complex(double r = 0, double i = 0) :real(r), imag(i) { }; friend Complex operator +(Complex &c1, Complex &c2); friend Complex operator +(Complex &c, double i); friend Complex operator +(double i, Complex &c); friend ostream& operator << (ostream&, Complex&); friend istream& operator >> (istream&, Complex&); private: double real; double imag; }; Complex operator +(Complex &c1, Complex &c2) { return Complex(c1.real + c2.real, c1.imag + c2.imag); } Complex operator +(Complex &c, double i) { return Complex(i + c.real, c.imag); } Complex operator +(double i, Complex &c) { return Complex(i + c.real, c.imag);