- 完成复数类的运算符重载函数,包括:
- 基本算术运算(+、-、*、/、=)
- 自增自减运算(前置++、后置++、前置--、后置--)
- 流运算符(<< 、>>)
要求:
- 复数的形式: a+bi 代表一个复数,其中a为实部,b为虚部,i为复数符号(i2 = -1)。
- 运算法则:
加法: (a+bi)+(c+di)=(a+c)+(b+d)i
减法:(a+bi)-(c+di)=(a-c)+(b-d)i
乘法:(a+bi)(c+di)=ac+adi+bci+bdi2 = (ac-bd)+(bc+ad)i
除法:(a+bi)/(c+di)=(ac+bd)/(c2+d2) +((bc-ad)/(c2+d2))i
#include<iostream>
using namespace std;
class className {
public:
double p1;
double p2;
className(double, double);
className();
/*加减乘除赋值*/
friend className operator+(className&, className&);
friend className operator-(className&, className&);
friend className operator*(className&, className&);
friend className operator/(className&, className&);
className& operator= (const className&);
/*输入和输出流*/
friend ostream& operator<<(ostream&, className&);
friend istream& operator>>(istream&, className&);
/*前后置自增自减*/
friend className operator++(className&);
friend className operator++(className&, int);
friend className operator--(className&);
friend className operator--(className&, int);
private:
double n, d;
};
className::className() {
this->n = 0;
this->d = 0;
}
className::className(double p, double p1) {
this->p1 = p;
this->p2 = p1;
}
//加法
className operator+(className& c1, className& c2)
{
c1.n = c1.p1 + c2.p1;
c1.d = c1.p2 + c2.p2;
return className(c1.n, c1.d);
}
//减法
className operator-(className& c1, className& c2)
{
c1.n = c1.p1 - c2.p1;
c1.d = c1.p2 - c2.p2;
return className(c1.n, c1.d);
}
//乘法
className operator*(className& c1, className& c2)
{
c1.n = (c1.p1 * c2.p1) - (c1.p2 * c2.p2);
c1.d = (c1.p2 * c2.p1) + (c1.p1 * c2.p2);
return className(c1.n, c1.d);
}
//除法
className operator/(className& c1, className& c2)
{
c1.n = ((c1.p1 * c2.p1) + (c1.p2 * c2.p2)) / ((c2.p1 * c2.p1) + (c2.p2 * c2.p2));
c1.d = ((c1.p2 * c2.p1) - (c1.p1 * c2.p2)) / ((c2.p1 * c2.p1) + (c2.p2 * c2.p2));
return className(c1.n, c1.d);
}
//赋值
className& className::operator=(const className& cla)
{
if (cla.p1 != NULL && cla.p2 != NULL) {
this->p1 = cla.p1;
this->p2 = cla.p2;
}
return *this;
}
//输入
istream& operator>>(istream& put, className& cla)
{
put >> cla.p1 >> cla.p2;
return put;
}
//输出
ostream& operator<<(ostream& out, className& cla)
{
out << cla.p1 << "+" << cla.p2 << "i" << endl;
return out;
}
//前置++
className operator++(className& opl) {
opl.p1++;
opl.p2++;
return opl;
}
//后置++
className operator++(className& opl, int) {
className cla(opl);
cla.p1++;
cla.p2++;
return cla;
}
//前置--
className operator--(className& opl) {
opl.p1--;
opl.p2--;
return opl;
}
//后置--
className operator--(className& opl, int) {
className cla(opl);
cla.p1--;
cla.p2--;
return cla;
}
int main()
{
className cla, cla1;
className plus;//加
className subtract;//减
className ride;//乘
className divide;//除
cout << "请分别输入 a,b,c,d 4个数值" << endl;
cin >> cla >> cla1;
subtract = cla1 - cla;
cout << "减法:" << subtract << endl;
plus = cla + cla1;
cout << "加法:" << plus << endl;
ride = cla1 * cla;
cout << "乘法:" << ride << endl;
divide = cla1 / cla;
cout << "除法:" << divide << endl;
className lvalue(cla.p1, cla.p2), rvalue(cla1.p1, cla1.p2);
rvalue = lvalue;
cout << "赋值:" << rvalue << endl;
className afsub(cla.p1, cla.p2);
afsub++;
cout << "后置++:" << afsub << endl;
++afsub;
cout << "++前置:" << afsub << endl;
afsub--;
cout << "后置--:" << afsub << endl;
--afsub;
cout << "++前置:" << afsub << endl;
}
输出效果: