運算子多載(複雜的相關計算)

來源:互聯網
上載者:User

標籤:

       運算子多載實際上是一種特殊的函數重載,你必須定義一個函數。並告訴C++翻譯器,當遇到重載運算子調用該函數。該功能稱為運算子多載函數,通常類的成員函數。
     定義運算子多載函數的一般格式:
返回值類型 類名::operator重載的運算子(參數表)
{……}

operator是keyword。它與重載的運算子一起構成函數名。

因函數名的特殊性。C++編譯器能夠將這類函數識別出來。



詳細的加減乘除等代碼運算例如以下:

<span style="font-size:18px;">#include<iostream>#include<string>using namespace std;class Complex;                                       //提前聲明Complex operator+(int x, Complex &c);                //整數和對象的運算   ostream& operator<<(ostream &out, const Complex &c); //輸出資料流istream& operator>>(istream &in, Complex &c);        //輸入資料流class Complex                                        //定義Complex類{friend istream& operator>>(istream &in, Complex &c);//定義友元,能夠訪問私人成員friend ostream& operator<<(ostream &out, const Complex &c);friend Complex operator+(int x, Complex &c);public:Complex(const double real=0,const double imag=0):m_real(real),m_imag(imag)//建構函式(初始化){}~Complex()                                       //解構函式{}void Show()const                                 //顯示{cout<<"("<<m_real<<","<<m_imag<<")"<<endl;}Complex operator+(int x)                         //整型加{return Complex(m_real+x,m_imag);}Complex operator+(Complex &c)                    //對象加{return Complex(m_real+c.m_real,m_imag+c.m_imag);}Complex operator-(Complex &c)                    //對象減{return Complex(m_real-c.m_real,m_imag-c.m_imag);}Complex operator*(Complex &c)                    //對象乘{return Complex(m_real*c.m_real-m_imag*c.m_imag,   m_real*c.m_imag+m_imag*c.m_real);}Complex operator/(Complex &c)                    //對象除{double t = c.m_real*c.m_real+ c.m_imag * c.m_imag;//分母return Complex((m_real *c.m_real+ m_imag * c.m_imag)/t,   (m_imag *c.m_real - m_real * c.m_imag)/t);}Complex operator+=(Complex &c)                    //對象加等於{ return Complex(m_real+m_real+c.m_real,m_imag+m_imag+c.m_imag);}Complex operator-=(Complex &c)                    //對象減等於{return Complex(c.m_real,c.m_imag);}Complex operator*=(Complex &c)                    //對象乘等於{return Complex(m_real*m_real*c.m_real-m_real*m_imag*c.m_imag-m_imag*m_real*c.m_imag-m_imag*m_imag*c.m_real ,m_real*m_real*c.m_imag+m_real*m_imag*c.m_real+m_imag*m_real*c.m_real-m_imag*m_imag*c.m_imag);}Complex operator/=(Complex &c)                    //對象除等於{double t = c.m_real*c.m_real+ c.m_imag * c.m_imag;//分母的分母double m = (((m_real *c.m_real+ m_imag * c.m_imag)/t)*//分母((m_real *c.m_real+ m_imag * c.m_imag)/t)+((m_imag *c.m_real - m_real * c.m_imag)/t)*((m_imag *c.m_real - m_real * c.m_imag)/t));double a = (m_real *c.m_real+ m_imag * c.m_imag)/t;//後值的實部double b = (m_imag *c.m_real - m_real * c.m_imag)/t;//後值的虛部return Complex((m_real*a-m_imag*b)/m,(m_imag*a+m_real*b)/m);}private:double m_real;                                           //私人成員double m_imag;                                           //私人成員};Complex operator+(int x, Complex &c)                         //類外定義{return Complex(x+c.m_real,c.m_imag);}ostream& operator<<(ostream &out, const Complex &c){out<<"("<<c.m_real<<","<<c.m_imag<<")";return out;}istream& operator>>(istream &in, Complex &c){in>>c.m_real>>c.m_imag;return in;}void main()                                                  //函數測試{Complex c1(1,2);Complex c2(2,3);Complex n;int s;cin >> s; n = s;cout<<n<<endl;Complex a;a = c1 + c2;cout<<a<<endl;Complex b;b = c1 - c2;cout<<b<<endl;Complex c;c = c1 * c2;cout<<c<<endl;Complex d;d = c1 / c2;cout<<d<<endl;Complex e;e = c1 += c2;cout<<e<<endl;Complex f;f = c1 -= c2;cout<<f<<endl;Complex g;g = c1 *= c2;cout<<g<<endl;Complex k;k = c1 /= c2;cout<<k<<endl;Complex l;int x;cin >> x;l = x + c1;cout<<l<<endl;}</span>

假設有不完好的地方希望大家能夠指出,謝謝~


在後期的學習中。我發現對於+=、-=、*=、/=的理解有錯誤。改正例如以下:

<span style="font-size:18px;">Complex operator+=(Complex &c)                    //對象加等於{ m_real = m_real+c.m_real;m_imag = m_imag+c.m_imag;return *this;}Complex operator-=(Complex &c)                    //對象減等於{m_real = m_real-c.m_real;m_imag = m_imag-c.m_imag;return *this;}Complex operator*=(Complex &c)                    //對象乘等於{int new_m_real = m_real;m_real = m_real*c.m_real-m_imag*c.m_imag;m_imag = new_m_real*c.m_imag+m_imag*c.m_real;return *this;}Complex operator/=(Complex &c)                        //對象除等於{double t = c.m_real*c.m_real+ c.m_imag * c.m_imag;//分母int new_m_real = m_real;m_real = (m_real *c.m_real+ m_imag * c.m_imag)/t;m_imag = (m_imag *c.m_real - new_m_real * c.m_imag)/t;return *this;}</span>

註:在進行測試時。因為+=、-=、*=、/=它會改變原來值,無需單獨測試。

著作權聲明:本文博主原創文章。部落格,未經同意不得轉載。

運算子多載(複雜的相關計算)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.