過載運算子

2021-08-20 07:16:59 字數 4211 閱讀 4606

過載運算子

我對過載運算子的理解就是:將以前所學的運算子給公升級化了,使得使用者自定義的資料以一種更簡潔的方式工作,(舉個例子:以前的大於號小於號只能比較數字的大小,而過載後的運算子的功能不僅僅可以比較數字的大小,它還可以對年月日進行比較)

過載運算子的過程中對運算子的過載也是有限制的

可以過載的運算子:.  ::  .*  ?: sizeof

可以過載的運算子:

() new delete new delete

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

1.不改變運算子的優先順序

2.不改變運算子的結合性

3.不改變運算子所需要的運算元

4.不能建立新的運算子

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

一元運算子

過載為成員函式,解釋為:

object . operator op ()

運算元由物件object通過this指標隱含傳遞

過載為友元函式,解釋為:

operator op (object)

(運算元由參數列的引數object提供)

二元運算子

objectl 

op  objectr

過載為成員函式,解釋為:

objectl . operator op ( objectr )

左運算元由objectl通過this指標傳遞,右運算元由引數objectr傳遞

過載為友元函式,解釋為:

operator op ( objectl, objectr )

左右運算元都由引數傳遞

用成員函式過載運算子

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

class x

對雙目運算子而言,成員運算子函式的形參表中僅有乙個引數,它作為運算子的右運算元,此時當前物件作為運算子的左運算元,它通過this指標隱含地傳遞給函式的。

#include class complex

complex(double r,double i)

complex operator + (complex &c2); //過載運算子"+"

void display( );

private:

double real;

double imag;

};

一般而言,如果在類x中採用成員函式過載雙目運算子@,成員運算子函式operator@ 所需的乙個運算元由物件aa通過this指標隱含地傳遞,它的另乙個運算元bb在參數列中顯示,aa和bb是類x的兩個物件,則以下兩種函式呼叫方法是等價的:

aa @ bb;

// 隱式呼叫

aa.operator @(bb);

// 顯式呼叫

對單目運算子而言,成員運算子函式的參數列中沒有引數,

此時當前物件作為運算子的乙個運算元。

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

@aa;

// 隱式呼叫

aa.operator@();

// 顯式呼叫

成員運算子函式operator @所需的乙個運算元由物件aa通過this

指標隱含地傳遞。因此

,在它的參數列中沒有引數。

用友元函式過載

友元函式過載運算子常用於運算子的左右運算元型別不同的情況

class   complex

complex ( int a , int b )

complex operator + ( complex ) ;

…...

} ;

int f ( )

z . operator + ( 27 )z = 27 + z ; //27. operator + ( z )…...

}

1.在第乙個引數需要隱式轉換的情形下,使用友元函式過載運算子是正確的選擇

2.友元函式沒有 this 指標,所需運算元都必須在參數列顯式宣告,很容易實現型別的隱式轉換

3.c++中不能用友元函式過載的運算子有  =    ()    []    ->

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

雙目運算子一般可以被過載為友元運算子函式或成員運算子函式,但當運算元型別不相同時,必須使用友元函式.

數學類中常用的幾個運算子過載的特點和應用

設 a  aobject ;

運算子 ++和 - - 有兩種方式:

前置方式:

(++aobject   --aobject)

成員函式過載

a :: a operator++ () ;

解釋為: aobject . operator ++( ) ;

友元函式過載 friend a operator++ (a &) ;

解釋為: operator ++( aobject ) ;

後置方式:(aobject++  aobject --) 

成員函式過載

a :: a

operator++ (int) ;//(int)偽引數

解釋為: aobject . operator ++( 0 ) ;

友元函式

過載:friend a operator++ (a &, int) ;

解釋為: operator++(aobject, 0)

過載賦值運算子

1.賦值運算子過載用於物件資料的複製

2. operator= 必須過載為成員函式

過載函式原型為:

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

過載流插入和流提取運算子

1.istream 和 ostream 是 c++ 的預定義流類

2.cin 是 istream 的物件,coutostream的物件

3.運算子 << 由ostream過載為插入操作,用於輸出基本型別資料

4.運算子 >> 由 istream 過載為提取操作,用於輸入基本型別資料

5.用友元函式過載 << 和 >> ,輸出和輸入使用者自定義的資料型別

過載輸出運算子「<<」(只能被過載成友元函式,不能過載成成員函式)

定義輸出運算子「<<」過載函式的一般格式如下

:

ostream& operator<<(ostream& out,class_name& obj)

個人心得

使用過載後的運算子,對我們寫**幫助是非常大的,特別是對寫類和物件這一類的**時,對於查詢某一時間段的交易記錄是非常有幫助的,比如在寫atm中的時間類時,就非常地有幫助。原因是運算子過載之後,可以直接對時間進行比較,以前運算子未被過載時,只能簡單地對數字進行比較。運算子過載之後,運算子都相當於公升級了,作用更大了。但是我們應該注意:並不是所有的運算子都可以過載,只有部分運算子可以過載. 在寫過載運算子時還應該注意過載的方式不同,有前置方式和後置方式。我感覺運算子過載這一章挺重要的,所以我們應該好好學習並熟練掌握這一章的內容,最重要的是還要會使用。我們學習不僅僅是為了寫**,而是為了更好地優化**,我們要好好運用所學的知識去優化**。

過載運算子

題目描述 定義乙個矩形類,資料成員包括左下角和右上角座標,定義的成員函式包括必要的建構函式 輸入座標的函式,實現矩形加法,以及計算並輸出矩形面積的函式。要求使用提示中給出的測試函式並不得改動。兩個矩形相加的規則是 決定矩形的對應座標分別相加,如 左下角 1,2 右上角 3,4 的矩形,與 左下角 2...

過載運算子

include include using namespace std class test test const int a v a test const test t1 v t1.v 以下過載小於號 比較兩個物件的大小 bool operator const test t1 const 比較物件...

過載運算子

1.當乙個過載的運算子是成員函式時,this繫結到左側運算物件。成員運算子函式的引數比運算物件的數量少乙個。非成員函式呼叫等價於 data1 data2 普通表示式 operator data1,data2 等價的函式呼叫成員函式呼叫等價於 data1 data2 普通表示式 data1.opera...