#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; }