c++重载(以运算符重载为主)
重載(OverLoading)是面向?qū)ο蟪绦蛟O(shè)計多態(tài)性的一種體現(xiàn)。所謂重載,是指“同一標(biāo)識符”在同一作用域的不同場合具有不同的語義,這個標(biāo)識符可以是函數(shù)名或運算符。也就是說,重載可以使多個函數(shù)使用同一個函數(shù)名,或者同一個運算符代表不同的運算規(guī)則。因此,重載包括函數(shù)重載和運算符重載,使c++使用重載是為了使程序更加簡潔。
函數(shù)重載
①普通函數(shù)重載
②構(gòu)造函數(shù)重載
③成員函數(shù)重載
具體略......
運算符重載
運算符重載規(guī)則:
①c++中的運算符除了少數(shù)幾個以外,全部可以重載,具體規(guī)則......
②c++不允許用戶自定義新的運算符,只能對c++已有的運算符進行重載。不能重載的有:. * :: sizeof ?: 這五個。
③重載不能改變運算符運算對象(即操作數(shù))的個數(shù)。
④重載不能改變運算符的優(yōu)先級和結(jié)合性。
⑤重載運算符必須和用戶所定義的自定義對象一起使用,使其參數(shù)......
⑥重載運算符的參數(shù)不能有默認(rèn)參數(shù),否則就企圖改變運算符參數(shù)的個數(shù)。
⑦對于類對象的運算符一般必須重載,但有兩個例外,運算符 = 和 & 不必用戶重載。
例如:......
⑧運算符重載是對......
省略處懶得寫了。
運算符重載形式:
①重載為類的成員函數(shù)
語法格式: type operator 運算符(形式參數(shù)表)
參數(shù)表中的參數(shù)數(shù)目與要重載的運算符有關(guān)。如果重載彈幕運算符,則參數(shù)表是空的,此時當(dāng)前對象作為運算符的單操作數(shù);如果重載雙目運算符,則參數(shù)表中有一個操作數(shù),運算時左操作數(shù)是當(dāng)前對象本身的數(shù)據(jù),參數(shù)表中的操作數(shù)作為右操作數(shù)。
例:重載運算符'+',使之能用于兩個復(fù)數(shù)相加:
1 #include<iostream> 2 using namespace std; 3 4 class Complex 5 { 6 public: 7 Complex(){real=0;imag=0;} 8 Complex(double r,double i){real=r;imag=i;} 9 Complex operator +(Complex& c2); 10 void display() 11 { 12 cout<<'('<<real<<','<<imag<<'i'<<')'<<endl; 13 } 14 private: 15 double real; 16 double imag; 17 }; 18 19 int main() 20 { 21 Complex c1(3,4),c2(5,-10),c3; 22 c3=c1+c2; 23 c1.display(); 24 c2.display(); 25 c3.display(); 26 27 return 0; 28 } 29 30 Complex Complex::operator +(Complex& c2) 31 { 32 Complex c; 33 c.real=real+c2.real; 34 c.imag=imag+c2.imag; 35 return c; 36 }
運行結(jié)果:
?
②重載為類的友元函數(shù)
語法格式: friend type operator 運算符(形式參數(shù)表)
其中,friend是聲明友元的關(guān)鍵字,type為函數(shù)返回類型;operator是定義運算符重載函數(shù)的關(guān)鍵字;“運算符”是要重載的運算符符號;參數(shù)表給出該運算符所需要的參數(shù)。
例:重載運算符'+',使其實現(xiàn)復(fù)數(shù)相加,用友元函數(shù)實現(xiàn)。
1 #include<iostream> 2 using namespace std; 3 4 class Complex 5 { 6 public: 7 Complex(){real=0;imag=0;} 8 Complex(double r,double i){real=r;imag=i;} 9 friend Complex operator +(Complex& c1,Complex& c2); 10 void display() 11 { 12 cout<<'('<<real<<','<<imag<<'i'<<')'<<endl; 13 } 14 private: 15 double real; 16 double imag; 17 }; 18 19 int main() 20 { 21 Complex c1(3,4),c2(5,-10),c3; 22 c3=c1+c2; 23 c1.display(); 24 c2.display(); 25 c3.display(); 26 27 return 0; 28 } 29 30 Complex operator +(Complex& c1,Complex& c2) 31 { 32 Complex c; 33 c.real=c1.real+c2.real; 34 c.imag=c1.imag+c2.imag; 35 return c; 36 37 //or 38 //return Complex(c1.real+c2.real,c2.imag+c2.imag); 39 }
運行結(jié)果和上面重載為類的成員函數(shù)相同。
③其他用算符的重載
自加(++)自減(--)運算符重載:為了方便起見,重載為類的成員函數(shù)。
賦值(=)(+= 、-=、*=、/=)運算符重載:解決指針懸掛問題。
下標(biāo)運算符[]:一般采用成員函數(shù)的形式重載,主要應(yīng)用是讀取數(shù)組的某個元素。
函數(shù)調(diào)用運算符()的重載:......。
PS:重載運算符[]和()時只能定義為成員函數(shù),而不能用友元函數(shù)。
輸入輸出流運算符:(輸出流運算符:<<和輸入流運算符:>>)
輸入輸出流運算符是c++類庫提供的......(自行了解)
對“>>”和“<<”重載的函數(shù)形式如下:
istream & operator >> (istream&,自定義類&);
ostream & operator?<< (ostream&,自定義類&);
重載">>"和"<<"的函數(shù)作為友元函數(shù),而不能將它們定義為成員函數(shù)。
例子略......
v、
轉(zhuǎn)載于:https://www.cnblogs.com/tenjl-exv/p/7600347.html
總結(jié)
以上是生活随笔為你收集整理的c++重载(以运算符重载为主)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 身份证号码对应地区-官方措辞:行政区划代
- 下一篇: 使用VS Code开发.Net Core