#include<iostream.h>//不带后缀.h的头文件不支持把成员函数重载为友元函数。
//vc++所提供的老形式的带.h的头文件可以支持!!!
//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 + (int &x);//一个整数与复数相加的重载函数
friend
Complex operator + (int &x,Complex &c1);//定义友元
void display();
private:
double real;
double imag;
};
/******************复数相加*********************/
Complex Complex::operator + (Complex &c2)//两个复数相加
{
Complex c;
c.real=real+c2.real;//real是属于c1对象的,this指针!!!
c.imag=imag+c2.imag;//imag是属于c1对象的
return c;
}
/*****************复数与整数相加************************/
Complex Complex::operator + (int &x)//一个整数与复数相加
{
return Complex(x+real,imag);//real与imag是属于c1对象的
}
/*****************整数与复数相加***************************/
Complex operator + (int &x,Complex &c1)//一个整数与复数相加
{
return Complex(x+c1.real,c1.imag);
}
/*****************输出数据***************************/
void Complex::display()
{
cout<<"("<<real<<","<<imag<<"i"<<")"<<endl;
}
/****************主函数***************************/
int main()
{
Complex c1(3,4),c2(5,8),c3,c4,c5;int s=10;
c3=c1+c2;//调用c1的函数operator + ,以c2为参数
c4=c1+s;
c5=s+c1;
cout<<"c1=";c1.display();
cout<<"c2=";c2.display();
cout<<"s="<<s<<endl;
cout<<"c3=c1+c2=";c3.display();
cout<<"c4=c1+s=";c4.display();
cout<<"c5=s+c1=";c5.display();
return 0;
}