-  1  —運算符重載的要求C ++預定義運算符只能用于基本數(shù)據(jù)類型的運算:整數(shù),實數(shù),字符,邏輯等,而不能用于對象運算。
但是我們有時需要在對象之間使用運算符,因此這時我們必須重載運算符,以便可以將運算符用于對象之間的運算。
例如,在數(shù)學中,可以在+,-等上直接操作兩個復數(shù)。
但是,在C ++中,不允許在復數(shù)對象上直接使用+或-。
有時希望操作員也可以操作對象。
這樣,代碼更加簡潔易懂。
例如:complex_a和complex_b是兩個復數(shù)對象。
要找到兩個復數(shù)的和,我們希望可以將其直接寫為:complex_a + complex_b此時,我們需要重載+運算符。
— 2 —運算符重載的形式運算符重載的本質(zhì)是函數(shù)重載,可以將其作為普通函數(shù)或成員函數(shù)進行重載。
運算符重載的基本形式如下:返回值類型運算符運算符(形式參數(shù)列表) ...}這是實現(xiàn)復數(shù)對象的+和運算符重載的示例:class Complex //復數(shù)類{public://構造函數(shù),如果未傳遞任何參數(shù),則將實部和虛部初始化為默認為0。
復雜(double r = 0.0,double i = 0.0):m_real(r),m_imag(i){} //重載數(shù)運算符號,屬于成員函數(shù)Complexoperator-(const Complex& c){ //返回一個臨時對象return Complex(m_real-c.m_real,m_imag-c.m_imag);} //打印復數(shù)void PrintComplex(){cout& lt;& lt; m_real& lt;& lt; “,” & lt;& lt; m_imag& lt;& lt; endl;}& nbsp; & nbsp; & nbsp; & nbsp; //將以+重載的普通函數(shù)定義為朋友函數(shù)& nbsp; & nbsp; //目的是使friend函數(shù)訪問對象的私有成員。
& nbsp;朋友Complex運算符+(const Complex& amp; a,const complex& amp; b); & nbsp; & nbsp; private:double m_real; & nbsp; //實數(shù)部分double m_imag的值; & nbsp; //虛部的值}; //重載+運算符,屬于普通函數(shù),而不是對象的成員函數(shù)Complex運算符+(const Complex& amp; a,const Complex& b ){//返回一個臨時對象return Complex(a.m_real + b.m_real,a.m_imag + b.m_imag);)int main()(Complex a(2,2); Complex b(1,1);復雜c; c = a + b; //等同于c =運算符+(a,b)c.PrintComplex(); c = ab; //等同于c = a.operator-(b)c.PrintComplex(); return 0;}輸出結(jié)果:3,31,1從上面的示例中,我們可以知道作為成員函數(shù)的重載與普通函數(shù)之間的區(qū)別:當重載為成員函數(shù)時,參數(shù)數(shù)為運算符數(shù)減一。
例如:c = ab;等效于c = a。
當operator-(b)作為正態(tài)函數(shù)重載時,參數(shù)的數(shù)量即為運算符的數(shù)量,例如:c = a + b;& nbsp ;等效于c =運算符+(a,b)在上面的代碼中,我定義了ov的普通函數(shù)erloaded +運算符作為Complex復數(shù)類中的朋友函數(shù),其目的是為了使朋友函數(shù)能夠訪問對象的私有成員,否則它將編譯并報告錯誤。
-  3& nbsp;-加法和減法運算符的返回值和參數(shù)列表還有一個值得思考的問題:為什么重載和+運算符的返回類型使用的是Complex對象而不是Complex&放嗎?為什么運算符函數(shù)重載符號和+符號const復雜的參數(shù)列表? c經(jīng)常引用類型而不是Complex c? //重載運算符,屬于成員函數(shù)Complex Complex :: operator-(const Complex& c){//返回一個臨時對象return Complex(m_real-c.m_real,m_imag-c.m_imag);}首先,讓我先談談為什么參數(shù)表是const Complex& amp; amp;。
c經(jīng)常引用類型。
首先,如果參數(shù)表是公共對象,形式為Complex c,則在輸入?yún)?shù)時,將調(diào)用默認的賦值(復制)構造函數(shù),從而產(chǎn)生臨時對象,這會增加成本,因此請使用引用方法,并同時,為了防止所引用的對象被修改,將其定義為const Complex& amp; amp; amp; amp; amp; amp; amp; amp; amp; quot;。
c常量引用類型。
讓我說說為什么返回值是一個普通的Complex對象,因為執(zhí)行-和+運算符的函數(shù)后,需要將一個新對象返回到左值。