将运算符+重载为适用于复数加法,重载函数作为成员函数和不作为成员函数而放在类外作为Complex类的友元函数的混合使用。
#include<iostream>
using namespace std;
class Complex
{
public:
Complex()
{
real=0;
imag=0;
}
Complex(double r,double i)
{
real=r;
imag=i;
}
Complex operator+(Complex &c2);//声明重载运算符+的函数
friend Complex operator+(int &i,Complex &c);//重载函数作为友元函数
friend Complex operator+(Complex &c,int &i);//重载函数作为友元函数
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 operator+(int &i,Complex &c)//定义运算符+重载函数
{
return Complex(i+c.real,c.imag);
}
Complex operator+(Complex &c,int &i)//定义运算符+重载函数
{
return Complex(i+c.real,c.imag);
}
void Complex::display()
{
cout<<"("<<real<<","<<imag<<"i)"<<endl;
}
int main()
{
Complex c1(3,4),c2(5,-10),c3,c4;
int i=2;
c3=i+c2;
c4=c2+i;
cout<<"c1=";
c1.display();
cout<<"c2=";
c2.display();
cout<<"c3=i+c2=";
c3.display();
cout<<"c4=c2+i=";
c4.display();
return 0;
}