簡介C++編程中的運算符重載。本站提示廣大學習愛好者:(簡介C++編程中的運算符重載)文章只能為提供參考,不一定能成為您想要的結果。以下是簡介C++編程中的運算符重載正文
所謂重載,就是從新付與新的寄義。函數重載就是對一個已有的函數付與新的寄義,使之完成新功效,是以,一個函數名便可以用來代表分歧功效的函數,也就是”一位多用”。
運算符也能夠重載。現實上,我們曾經在不知不覺當中應用了運算符重載。例如,年夜 家都已習氣於用加法運算符”+”對整數、單精度數和雙精度數停止加法運算,如5+8, 5.8 +3.67等,其實盤算機對整數、單精度數和雙精度數的加法操作進程是很不雷同的, 但因為C++曾經對運算符”+”停止了重載,所以就可以實用於int, float, doUble類型的運算。
又如”<<“是C++的位運算中的位移運算符(左移),但在輸入操作中又是與流對 象cout 合營應用的流拔出運算符,”>>“也是位移運算符(右移),但在輸出操作中又是與流對象 cin 合營應用的流提取運算符。這就是運算符重載(operator overloading)。C++體系對”<<“和”>>“停止了重載,用戶在分歧的場所下應用它們時,感化是分歧 的。對”<<“和”>>“的重載處置是放在頭文件stream中的。是以,假如要在法式頂用”<<“和”>>”作流拔出運算符和流提取運算符,必需在本文件模塊中包括頭文件stream(固然還應該包含”using namespace std“)。
如今要評論辯論的成績是:用戶可否依據本身的須要對C++已供給的運算符停止重載,付與它們新的寄義,使之一位多用。比方,可否用”+”號停止兩個單數的相加。在C++中不克不及在法式中直接用運算符”+”對單數停止相加運算。用戶必需本身想法完成單數相加。例如用戶可以經由過程界說一個專門的函數來完成單數相加。
[例] 經由過程函數來完成單數相加。
#include <iostream> using namespace std; class Complex //界說Complex類 { public: Complex( ){real=0;imag=0;} //界說結構函數 Complex(double r,double i){real=r;imag=i;} //結構函數重載 Complex complex_add(Complex &c2); //聲明單數相加函數 void display( ); //聲明輸入函數 private: double real; //實部 double imag; //虛部 }; Complex Complex::complex_add(Complex &c2) { Complex c; c.real=real+c2.real; c.imag=imag+c2.imag; return c; } void Complex::display( ) //界說輸入函數 { cout<<"("<<real<<","<<imag<<"i)"<<endl; } int main( ) { Complex c1(3,4),c2(5,-10),c3;//界說3個單數對象 c3=c1.complex_add(c2); //挪用單數相加函數 cout<<"c1="; c1.display( );//輸入c1的值 cout<<"c2="; c2.display( );//輸入c2的值 cout<<"c1+c2="; c3.display( );//輸入c3的值 return 0; }
運轉成果以下:
c1=(3+4i) c2=(5-10i) c1+c2=(8,-6i)
成果無疑是准確的,但挪用方法不直不雅、太煩瑣,令人覺得很不便利。可否也和整數的加法運算一樣,直接用加號”+”來完成單數運算呢?如
c3=c1+c2;
編譯體系就會主動完成c1和c2兩個單數相加的運算。假如能做到,就為對象的運算供給了很年夜的便利。這就須要對運算符”+“停止重載。