c++運算符重載

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章