c++重載(以運算符重載為主)


重載(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、


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM