前言
本文以对复数类型进行运算为例一、实现的东西
1.定义一个Complex类(复数的英文单词),并用构造函数初始化;
2.对输入流">>“运算符用于Complex,输入的重载;
3.对输出流”<<“运算符用于Complex,输出的重载,使之能用输入,输出流符号实现直接对一个Complex 类型的输入,输出;
4.对运算符”+"重载,使能用于Complex型数据的运算;
5.将一个double类型数据转换为Complex类的转换构造函数;
6.将Complex类型数据转换为double类型的类型转化函数;
7.在main函数对Complex类数据和double型数据混合运算;
二、实例
1.完整代码
代码:
#include<iostream>
using namespace std;
/*
编写一个程序,处理一个复数与一个double数相加,结果存放在一个double型变量的中,输出
d1,再以复数形式输出这个值,定义Complex类,在成员函数中包括重载类型转换运算符
operator double(){return real;}
*/
class Complex {//定义Complex类
public:
Complex() { real = 0; imge = 0; }//无参构造函数
Complex(double r,double i):real(r),imge(i){}//有参构造函数
friend ostream& operator << (ostream&, Complex&);//因为cout是iostream内的内容 所以要引用它,必须为ostream& operator <<
//且只能为友元函数
friend istream& operator >> (istream&, Complex&);//对输入流>>的重载
operator double() { return real; }//类型转换函数,返回实部值
Complex(double r) { real = r; imge = 0; }//转换构造函数,将输入值转为Complex的实部值
friend Complex operator + (Complex &,Complex &);//对+的重载
private:
double real;//复数实部
double imge;//虚部
};
int main() {
Complex c1(1, 2), c2(2, 4), c3,c4;
double d1;
d1 = c1 + 2.5;//d1是double,将double和Complex,相加
cout << d1 << endl;//输出d1的值
c3 = c1 + Complex(2.5);//c3是Complex,将doublex转换为Complex型,相加,此时用到了,对Complex重载的+
cout << c3;
//输入c4
cin >> c4;
//输出c4
cout << c4;
return 0;
}
ostream& operator <<(ostream& output, Complex& c) {//输出流<<的重载
if (c.imge >= 0) output << "(" << c.real << "+" << c.imge << "i)" << endl;//使输出是这个形式:(3+4i)
else output << "(" << c.real << "" << c.imge << "i)" << endl;//虚部是负数
return output;//返回输出流,让后面可以继续用>>输出
}
istream& operator >>(istream& cin, Complex& c) {//重载输入流>>
cin >> c.real >> c.imge;//输入实部和虚部
return cin;//返回输入流
}
Complex operator +(Complex &c1,Complex &c2) {//对+进行重载使能适用于Complex的加减
return Complex(c1.real + c2.real, c1.imge + c2.imge);//返回相加后的值
}
2.实验结果
总结
如果对你有用,希望可以点个赞