重載(OverLoading)是面向對象程序設計多態性的一種體現。所謂重載,是指“同一標識符”在同一作用域的不同場合具有不同的語義,這個標識符可以是函數名或運算符。也就是說,重載可以使多個函數使用同一個函數名,或者同一個運算符代表不同的運算規則。因此,重載包括函數重載和運算符重載,使c++使用重載是為了使程序更加簡潔。
函數重載
①普通函數重載
②構造函數重載
③成員函數重載
具體略......
運算符重載
運算符重載規則:
①c++中的運算符除了少數幾個以外,全部可以重載,具體規則......
②c++不允許用戶自定義新的運算符,只能對c++已有的運算符進行重載。不能重載的有:. * :: sizeof ?: 這五個。
③重載不能改變運算符運算對象(即操作數)的個數。
④重載不能改變運算符的優先級和結合性。
⑤重載運算符必須和用戶所定義的自定義對象一起使用,使其參數......
⑥重載運算符的參數不能有默認參數,否則就企圖改變運算符參數的個數。
⑦對於類對象的運算符一般必須重載,但有兩個例外,運算符 = 和 & 不必用戶重載。
例如:......
⑧運算符重載是對......
省略處懶得寫了。
運算符重載形式:
①重載為類的成員函數
語法格式: type operator 運算符(形式參數表)
參數表中的參數數目與要重載的運算符有關。如果重載彈幕運算符,則參數表是空的,此時當前對象作為運算符的單操作數;如果重載雙目運算符,則參數表中有一個操作數,運算時左操作數是當前對象本身的數據,參數表中的操作數作為右操作數。
例:重載運算符'+',使之能用於兩個復數相加:
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 }
運行結果:
②重載為類的友元函數
語法格式: friend type operator 運算符(形式參數表)
其中,friend是聲明友元的關鍵字,type為函數返回類型;operator是定義運算符重載函數的關鍵字;“運算符”是要重載的運算符符號;參數表給出該運算符所需要的參數。
例:重載運算符'+',使其實現復數相加,用友元函數實現。
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 }
運行結果和上面重載為類的成員函數相同。
③其他用算符的重載
自加(++)自減(--)運算符重載:為了方便起見,重載為類的成員函數。
賦值(=)(+= 、-=、*=、/=)運算符重載:解決指針懸掛問題。
下標運算符[]:一般采用成員函數的形式重載,主要應用是讀取數組的某個元素。
函數調用運算符()的重載:......。
PS:重載運算符[]和()時只能定義為成員函數,而不能用友元函數。
輸入輸出流運算符:(輸出流運算符:<<和輸入流運算符:>>)
輸入輸出流運算符是c++類庫提供的......(自行了解)
對“>>”和“<<”重載的函數形式如下:
istream & operator >> (istream&,自定義類&);
ostream & operator << (ostream&,自定義類&);
重載">>"和"<<"的函數作為友元函數,而不能將它們定義為成員函數。
例子略......
v、