#define _COMPLEC_H_
class Complex
{
private:
double a;
double b;
public:
Complex(double a=0, double b=0);
double getA();
double getB();
double getmodulus();
Complex operator + (const Complex& c);
Complex operator - (const Complex& c);
Complex operator * (const Complex& c);
Complex operator / (const Complex& c);
bool operator == (const Complex& c);
bool operator != (const Complex& c);
Complex& operator = (const Complex& c); // 赋值操作符重载特殊之处:只能作为成员函数实现
};
#endif
#include "Complex.h"
#include<cmath>
Complex:: Complex(double a, double b) //注意:构造函数使用了参数默认值方式,只能在函数声明的地方指定默认值,在函数定义的地方不需要指定默认值
{
this->a=a;
this->b=b;
}
double Complex::getA()
{
return a;
}
double Complex::getB()
{
return b;
}
double Complex::getmodulus()
{
return sqrt(a*a+b*b);
}
Complex Complex::operator + (const Complex& c)
{
double na=a+c.a;
double nb=b+c.b;
Complex ret(na,nb);
return ret;
}
Complex Complex::operator - (const Complex& c)
{
double na=a-c.a;
double nb=b-c.b;
Complex ret(na,nb);
return ret;
}
Complex Complex::operator * (const Complex& c)
{
double na=a*c.a-b*c.b;
double nb=b*c.a+a*c.b;
Complex ret(na,nb);
return ret;
}
Complex Complex::operator / (const Complex& c)
{
double cm=c.a*c.a+c.b+c.b;
double na=(a*c.a+b*c.b)/cm;
double nb=(b*c.a-a*c.b)/cm;
Complex ret(na,nb);
return ret;
}
bool Complex::operator == (const Complex& c)
{
return (a==c.a)&&(b=c.b);
}
bool Complex::operator != (const Complex& c)
{
return !(*this==c);
}
Complex& Complex::operator = (const Complex& c) // 赋值操作符重载特殊之处:只能作为成员函数实现
{
if( this !=&c )
{
a=c.a;
b=c.b;
}
return *this; // 对于赋值而言,他是可以进行连续赋值操作的,必须将左操作数直接返回
}
#include<iostream>
#include "Complex.h"
using namespace std;
int main()
{
Complex c1(1,2);
Complex c2(3,6);
Complex c3=c2-c1;
Complex c4=c1*c3;
Complex c5=c2/c1;
cout<<c3.getA()<<" "<<c3.getB()<<endl;
cout<<c4.getA()<<" "<<c4.getB()<<endl;
cout<<c5.getA()<<" "<<c5.getB()<<endl;
Complex c6(2,4);
cout<<(c6==c3)<<endl;
cout<<(c6!=c4)<<endl;
(c3=c2)=c1;
cout<<c1.getA()<<" "<<c1.getB()<<endl;
cout<<c2.getA()<<" "<<c2.getB()<<endl;
cout<<c3.getA()<<" "<<c3.getB()<<endl;
return 0;
}
注意事项:
c++规定赋值操作符(=)只能重载为成员函数
操作符重载不能改变原操作符的优先级
操作符重载不能改变操作数的个数
操作符重载不应改变操作符的原有语义。
操作符重载的本质为函数定义。