程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 運算符的重載

運算符的重載

編輯:C++入門知識

[cpp]  #include <iostream>  
using namespace std; 
class Complex 

public: 
    Complex(){real=0;imag=0;} 
    Complex(double r,double i){real=r;imag=i;} 
    //Complex &operator=(Complex &c){real=c.real;imag=c.imag;return *this;}  
    Complex operator-(); 
    //實現輸入、輸出的運算符重載  
    friend ostream& operator<< (ostream& output, Complex& c); 
    friend istream& operator>> (istream& input,Complex& c); 
    //實現加減乘除的運算符重載  
    friend Complex operator+(Complex &c1, Complex &c2); 
    friend Complex operator+(double d1, Complex &c2); 
    friend Complex operator+(Complex &c1, double d2); 
    friend Complex operator-(Complex &c1, Complex &c2); 
    friend Complex operator-(double d1, Complex &c2); 
    friend Complex operator-(Complex &c1, double d2); 
    friend Complex operator*(Complex &c1, Complex &c2); 
    friend Complex operator*(double d1, Complex &c2); 
    friend Complex operator*(Complex &c1, double d2); 
    friend Complex operator/(Complex &c1, Complex &c2); 
    friend Complex operator/(double d1, Complex &c2); 
    friend Complex operator/(Complex &c1, double d2); 
private: 
    double real; 
    double imag; 
}; 
 
//實現輸出的運算符重載  
ostream &operator << (ostream &output, Complex &c) 

        output<<"("<<c.real; 
    if(c.imag>=0) output<<"+"; 
    output<<c.imag<<"i)"; 
    return output; 

 
//實現輸入的運算符重載  
istream& operator >> (istream& input,Complex& c) 

        int a,b; 
    char sign,i; 
    do 
    {   cout<<"input a complex number(a+bi或a-bi):"; 
        input>>a>>sign>>b>>i; 
    } 
    while(!((sign=='+'||sign=='-')&&i=='i')); 
    c.real=a; 
    c.imag=(sign=='+')?b:-b; 
    return input; 

 
 
Complex Complex::operator-() 

    return(0.0-*this); 

 
//復數相加:(a+bi)+(c+di)=(a+c)+(b+d)i.  
Complex operator+(Complex &c1, Complex &c2) 

    Complex c; 
    c.real=c1.real+c2.real; 
    c.imag=c1.imag+c2.imag; 
    return c; 

Complex operator+(double d1, Complex &c2) 

    Complex c0(d1,0),c; 
    return c0+c2; //按運算法則計算的確可以,但充分利用已經定義好的代碼,既省人力,也避免引入新的錯誤,但可能機器的效率會不佳  

Complex operator+(Complex &c1, double d2) 

    Complex c0(d2,0),c; 
    c=c1+c0; 
    return c; 

//復數相減:(a+bi)-(c+di)=(a-c)+(b-d)i.  
Complex operator-(Complex &c1, Complex &c2) 

    Complex c; 
    c.real=c1.real-c2.real; 
    c.imag=c1.imag-c2.imag; 
    return c; 

Complex operator-(double d1, Complex &c2) 

    Complex c(d1,0); 
    return c-c2; 

Complex operator-(Complex &c1, double d2) 

    Complex c(d2,0); 
    return c1-c; 

 
//復數相乘:(a+bi)(c+di)=(ac-bd)+(bc+ad)i.  
Complex operator*(Complex &c1, Complex &c2) 

    Complex c; 
    c.real=c1.real*c2.real-c1.imag*c2.imag; 
    c.imag=c1.imag*c2.real+c1.real*c2.imag; 
    return c; 

Complex operator*(double d1, Complex &c2) 

    Complex c(d1,0); 
    return c*c2; 

Complex operator*(Complex &c1, double d2) 

    Complex c(d2,0); 
    return c1*c; 

 
//復數相除:(a+bi)/(c+di)=(ac+bd)/(c^2+d^2) +(bc-ad)/(c^2+d^2)i  
Complex operator/(Complex &c1, Complex &c2) 

    Complex c; 
    c.real=(c1.real*c2.real+c1.imag*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag); 
    c.imag=(c1.imag*c2.real-c1.real*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag); 
    return c; 

Complex operator/(double d1, Complex &c2) 

    Complex c(d1,0); 
    return c/c2; 

 
Complex operator/(Complex &c1, double d2) 

    Complex c(d2,0); 
    return c1/c; 

 
int main() 

    Complex c1,c2,c3,c; 
    double d=11; 
    cout<<"c1: "<<endl;; 
    cin>>c1; 
    cout<<"c2: "<<endl; 
    cin>>c2; 
    cout<<"c1="<<c1<<endl; 
    cout<<"c2="<<c2<<endl; 
    cout<<"d="<<d<<endl; 
    cout<<"-c1="<<(-c1); 
    c3=c1+c2; 
    cout<<"c1+c2="<<c3<<endl; 
    cout<<"c1+d="<<(c1+d)<<endl; 
    cout<<"d+c1="<<(d+c1)<<endl; 
    c3=c1-c2; 
    cout<<"c1-c2="<<c3<<endl; 
    cout<<"c1-d="<<(c1-d)<<endl; 
    cout<<"d-c1="<<(d-c1)<<endl; 
    c3=c1*c2; 
    cout<<"c1*c2="<<c3<<endl; 
    cout<<"c1*d="<<(c1*d)<<endl; 
    cout<<"d*c1="<<(d*c1)<<endl; 
    c3=c1/c2; 
    cout<<"c1/c2="<<c3<<endl; 
    cout<<"c1/d="<<(c1/d)<<endl; 
    cout<<"d/c1="<<(d/c1)<<endl; 
 
    return 0; 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved