過載操作符時將其宣告為類成員還是非類成員的乙個標準

2021-06-14 23:29:55 字數 940 閱讀 8394

一般我們應該怎樣決定把乙個操作符宣告為了類成員還是名字空間成員呢?在某些情況下,程式設計師是沒有選擇的餘地。

1、如果乙個過載操作符是類成員,那麼只有當跟它一起被使用的左運算元是該類的物件時,它才被呼叫。如果該操作符的左運算元必須是其他的型別,那麼過載操作符必須是名字空間成員。

2、c++要求,賦值(=)、下標([ ])、呼叫(())和成員訪問箭頭(->)操作符必須被定義為類成員操作。任何把這些操作符定義為名字空間成員的定義都會被標記為編譯時刻錯誤。如果操作符的有個引數是類型別,那麼可以將該操作符定義為名字空間成員。例如:

//錯誤:必須是類string的成員

char& operator(string&, int i) ;

//正確:是類string的成員

char& operator(int i) const ;

//將等於(==)操作符宣告為類成員

bool operator ==(const string& str) const ;

//因為==操作符有乙個引數是string型別,則可以將其宣告為名字空間型別。

bool operator ==(const string& str1,const string& str2) ;

3、過載的操作符宣告為成員函式與宣告為非成員的區別:

//將遞增和遞減操作符宣告為類screen的成員函式

class screenptr

;//將遞增和遞減操作符宣告為類screen的非成員函式

class scrennptr

;

從上面的例子中,我們可以看到過載操作符時將其宣告為非成員函式時,需要在其操作符後面的參數列中需宣告呼叫該操作符的物件,而將其宣告為成員函式時,則不用在其操作符的參數列宣告呼叫其的物件。因為該過載操作符的函式是類的成員函式,那麼成員函式的呼叫是由該類的物件來呼叫。所以不用另外再宣告了。

C 類操作符過載筆記

不能改變操作符優先順序 不能改變操作符的結合性 不能改變操作符所需要的運算元 不能建立新的操作符 對於二元操作符過載,如果操作符左邊是類 那麼就在該類內部成員函式過載操作符即可 如果操作符左邊不是類,而是乙個常量,那麼就必須在類的外部定義乙個操作符過載函式 有乙個最基本條件 一定有乙個一元是乙個自定...

c string類的操作符過載

首先 先了解 class 類裡面給我們 預設過載了6個函式 分別是 預設構造 預設析夠 預設賦值 拷貝構造 過載 過載 然而我們需要關注的是 拷貝構造 因為如果你不重寫 拷貝構造的話 裡面的 資料全部都是淺拷貝 當 自己的倆個string 相等的時候 就會出問題 它裡面的char只想同乙個空間 所以...

c 學習 oop 過載成員訪問操作符

main.cpp date 12 03 21 16 01 description 過載成員訪問操作符 成員訪問操作符 解引用操作符 箭頭操作符 複習 管理指標成員 定義智慧型指標類 class pointer class string include include string.h include...