定义一个复数类Complex,重载运算符+,使之能用于复数的加法运算,要求将运算符+函数重载为非成员、非友元的普通函数;重载运算符-、采用友元函数方式; 重载运算符X、/,以成员函数方式实现。
分析当参加运算+的两个运算量可以都是类对象,也可以其中有一个是整数,顺序任意。如c1+c2,i+c1,c1+i均合法(设i为整数,c1,c2为复数)时,采用非成员函数方式重载与成员函数重载的区别。编程分别求两个复数之和、整数和复数之和。
另外,如果需要处理一个复数与一个double数相加的去处,结果存放在一个double型的变量d1中,输出d1的值。注意处理编译后可能发生的冲突。
要求:在一个项目工程中实现,只建立一个Complex类。分文件存放。将所有代码分类粘贴在答案区,注意每个文件的开始处添加注释行(说明文件名)。
//--------------------------------------------------complex.h------------------------------------------------------
#ifndef _COMPLEX_H_
#define _COMPLEX_H_
#include<iostream>
using namespace std;
class Complex{
public:
Complex( ){real=0;imag=0;}
Complex(double r,double i){real=r;imag=i;}
double get_real();
double get_imag();
operator double( ) {return real;}
friend Complex operator - (Complex c1,Complex c2);
Complex operator * (Complex &c2);
Complex operator / (Complex &c2);
friend ostream& operator<<(ostream&,Complex&);
private:
double real;
double imag;
};
#endif
//-------------------------------------------------complex.cpp----------------------------------------------------------------
#include"complex.h"
double Complex:: get_real()
{
return real;
}
double Complex:: get_imag()
{
return imag;
}
//加法
Complex operator + (Complex c1,Complex c2){
return Complex(c1.get_real()+c2.get_real(),c1.get_imag()+c2.get_imag());
}
//减法
Complex operator - (Complex c1,Complex c2){
return Complex(c1.real-c2.real,c1.imag-c2.imag);
}
//乘法
Complex Complex::operator * (Complex &c2){
return Complex(real*c2.real,imag*c2.imag);
}
//除法
Complex Complex::operator / (Complex &c2){
return Complex(real/c2.real,imag/c2.imag);
}
ostream& operator<<(ostream& output,Complex& c){
output<<"("<<c.real<<"+"<<c.imag<<"i)"<<endl;
return output;
}
int main(){
int i=2;
double d1;
Complex c1(2,2),c2(4,4),c3;
cout<<"加法:"<<endl;
c3=c1+c2;
cout<<"c1+c2="<<c3<<endl;
d1=i+c1;
cout<<"d1=i+c1="<<d1<<endl<<endl;
d1=c1+i;
cout<<"d1=c1+i="<<d1<<endl<<endl;
cout<<"减法:"<<endl;
c3=c2-c1;
cout<<"c2-c1="<<c3<<endl;
cout<<"乘法:"<<endl;
c3=c1*c2;
cout<<"c1*c2="<<c3<<endl;
cout<<"除法:"<<endl;
c3=c1/c2;
cout<<"c1/c2="<<c3<<endl;
return 0;
}