#include<iostream>
using namespace std;
class Complex
{
private:
double real;//定义复数的实部;
double imag;//定义复数的虚部;
public:
Complex();//声明构造函数;
Complex(double r,double i);//声明函数的重载;
Complex operator+(Complex &t);//声明实现复数相加的函数,引用变量(对变量的修改等同于对本身的修改)
friend ostream&operator<<(ostream& ,Complex &); /*在定义重载输入或输出运算符时
必须将重载函数作为友元函数或普通函数,不能把重载函数作为成员函数,第一个形参和函数的类型都必须是
istream&;*/
void display();
};
int main()
{
int a=1,b=2,c;//定义三个整形变量;
Complex t1(1,2);
Complex t2(3,4);
Complex t3;
t3=t1+t2;
c=a+b;/*运算同样类型的式子,但是输出的结果不是跟上式同类型,说明运算符的重载不影响正常的运算
这些运算只对该类中的对象使用,其他对象是没用的,运算符原有的功能保留,只是加了一个新功能(只能本类使用) */
cout<<"t1="<<ends;
t1.display();
cout<<"t2="<<ends;
t2.display();
cout<<"t1+t2= "<<ends;
t3.display();
cout<<endl;
cout<<c<<endl;
cout<<"this complex is :"<<t3;
return 0;
}
Complex::Complex()
{
real=0;
imag=0;
}
Complex::Complex(double r,double i)
{
real=r;
imag=i;
}
Complex Complex::operator+(Complex &t)
{
Complex t4;
t4.real=this->real+t.real;//this指针是指向本类对象的一个指针,它的值为被调用的成员函数所在对象的地址;
t4.imag=this->imag+t.imag;//这里即指:t1,即调用函数的那个对象;
/*上面的两个算式分别是两个实部想加,两个虚部相加;*/
return t4;//返回的不是某个值,而是定义得类对象;
}
void Complex::display()
{
cout<<"("<<real<<","<<imag<<"i)"<<endl;
}
ostream&operator<<(ostream &output ,Complex &t)
{
output<<"("<<t.real<<"+"<<t.imag<<"i)"<<endl;
return output;
}