#include <iostream> using namespace std; class Complex {public: Complex(){real=0;imag=0;} //无参构造 Complex(double r,double i){real=r;imag=i;}//带参构造 double get_real(); double get_imag(); void display(); private: double real; double imag; }; double Complex::get_real() {return real;} double Complex::get_imag() {return imag;} void Complex::display() {cout<<"("<<real<<","<<imag<<"i)"<<endl;} Complex operator + (Complex &c1,Complex &c2) { return Complex(c1.get_real()+c2.get_real(),c1.get_imag()+c2.get_imag()); } int main() {Complex c1(3,4),c2(5,-10),c3; c3=c1+c2; cout<<"c3="; c3.display(); return 0; }
//一般将单目和复合运算符(+=,-=,!=,>>=)重载为成员函数
//一般将双目运算符重载为友元函数
#include <iostream> //用 VC++时改为∶ #include <iostream.h> 友元函数 using namespace std; //用 VC++时为取消此行 class Complex {public: Complex(){real=0;imag=0;} Complex(double r,double i){real=r;imag=i;} Complex operator+(Complex &c2); Complex operator+(int &i); friend Complex operator+(int&,Complex &); void display(); private: double real; double imag; }; Complex Complex::operator+(Complex &c) {return Complex(real+c.real,imag+c.imag);} Complex Complex::operator+(int &i) {return Complex(real+i,imag);} void Complex::display() {cout<<"("<<real<<","<<imag<<"i)"<<endl;} Complex operator+(int &i,Complex &c) {return Complex(i+c.real,c.imag);} int main() {Complex c1(3,4),c2(5,-10),c3; int i=5; c3=c1+c2; cout<<"c1+c2="; c3.display(); c3=i+c1; cout<<"i+c1="; c3.display(); c3=c1+i; cout<<"c1+i="; c3.display(); return 0; }
//转换构造函数:(将一个其他类型(肯定包括类类型了)的数据转换成一个类的对象p.332)
转换构造函数只能有一个参数,Complex(double r){real=r;imag=0;}
现在可以Complex c=c1+(Complex)2.3
//类型转换函数:同上反,将一个类的对象转换成另一个类型的数据)
在函数名前不能指定函数类型,没有参数:operator double(){return real;}
现在可以double d=2.3+c1;
一个包含转换构造函数,类型转换函数,重载运算符+ 的友元函数的例子
#include <iostream> using namespace std; class Complex {public: Complex(){real=0;imag=0;} Complex(double r){real=r;imag=0;} //转换构造函数 Complex(double r,double i){real=r;imag=i;} operator double(){return real;} //类型转换函数 friend Complex operator+(Complex c1,Complex c2);//重载运算符+ 的友元函数 void display(); private: double real; double imag; }; Complex operator +(Complex c1,Complex c2) { return Complex(c1.real+c2.real,c1.imag+c2.imag);} void Complex::display() {cout<<"("<<real<<", "<<imag<<")"<<endl;} int main() {Complex c1(3,4),c2; double d1; d1=2.5+c1; cout<<"d1="<<d1<<endl; c2=Complex(d1); cout<<"c2="; c2.display(); return 0; }