1. 程式人生 > >過載運算子初學總結

過載運算子初學總結

一:過載運算子:

1過載運算子函式可以對運算子作出新的解釋,但原有基本語義不變:

①:不改變運算子的優先順序

②:不改變運算子的結合性

③:不改變運算子所需要的運算元

④:不能建立新的運算子

2:運算子函式可以過載為成員函式或友元函式。

3:成員運算子函式的原型在類的內部宣告格式如下:

class X {

    //

返回型別 operator運算子(形參表);

  //

}

在類外定義成員運算子函式的格式如下:

返回型別 X::operator運算子(形參表)

{

     函式體

}

4: 一般而言,採用成員函式過載單目運算子時,以下兩種方法是等價的:

    @aa;                      // 隱式呼叫

    [email protected]();    // 顯式呼叫

    成員運算子函式

operator @所需的一個運算元由物件aa通過this指標隱含地傳遞。因此,在它的引數表中沒有引數。

5:①:在第一個引數需要隱式轉換的情形下,使用友元函式過載。

②:友元函式沒有 this 指標,所需運算元都必須在引數表顯式。

③:C++中不能用友元函式過載的運算子有

=    ()    []    ->

6:①:成員運算子函式比友元運算子函式少帶一個引數(後置的++--需要增加一個形參)。

  ②:雙目運算子一般可以被過載為友元運算子函式或成員運算子函式,

但當運算元型別不相同時,必須使用友元函式。

7:①:賦值運算子過載用於物件資料的複製

②: operator= 必須過載為成員函式

③:過載函式原型為:

類名  &  類名  :: operator= ( 類名 ) ;

8[] () 只能用成員函式過載,不能用友元函式過載。

9:定義輸出運算子“<<”過載函式的一般格式如下:

    ostream& operator<<(ostream& outclass_name& obj)

    {

          out<<obj.item1;

          out<<obj.item2;

          .. .

          out<<obj.itemn;

          return out;

    }

10 :定義輸入運算子函式 “>>”過載函式的一般格式如下:

    istream& operator>>(istream& inclass_name& obj)

    {

            in>>obj.item1;

            in>>obj.item2;

            . . .

            in>>obj.itemn;

            return in;

    }

二:典型程式碼:

#include<iostream>

using namespace std;

class  Increase

{ public :

     Increase ( ) { value=0; }

     void  display( )  const { cout<<value<<'\n'; } ;

     friend Increase  operator ++ ( Increase & ) ;  // 前置

     friend Increase  operator ++ ( Increase &, int ) ;  // 後置

  private:   unsigned  value ;

};

Increase  operator ++ ( Increase & a )

  { a.value ++ ;   return a ; }

Increase  operator ++ ( Increase & a, int )

 { Increase  temp(a);   a.value ++ ;   return  temp; }

int main( )

  { Increase   a ,  b , n ;    int  i ;

     for ( i = 0 ; i < 10 ; i ++ )  a = n ++ ;

     cout <<"n= " ;  n.display( ) ;   cout <<"a= " ;   a.display( ) ;

     for ( i = 0 ; i < 10 ; i ++ )  b = ++ n ;

     cout << "n= " ;   n.display( ) ;   cout << "b= " ;   b.display( ) ;

 }

三:學習心得:

過載運算子和過載函式相似,遵循函式過載的基本原則。

過載之後的運算子不能改變運算子的優先順序和結合性,也不能改變運算子運算元的個數及語法結構。
運算子過載不能改變該運算子用於內部型別物件的含義。它只能和使用者自定義型別的物件一起使用,或者用於使用者自定義型別的物件和內部型別的物件混合使用時。總之通過學習運算子過載能更好的運用函式,使程式碼更精煉。