操作符過載

2021-07-29 17:53:34 字數 1270 閱讀 9985

1、  過載操作符必須具有至少乙個類型別或列舉型別的運算元。這條規則強制過載操作符不能重新定義用於內建型別物件的操作符的含義。

2、  除了函式呼叫操作符operator() 之外,過載操作符時使用預設實參是非法的。

3、  賦值操作符、取位址操作符和逗號操作符對類型別運算元有預設含義。如果沒有特定過載版本,編譯器就自己定義以下這些操作符。

4、  賦值(=)、下標()、呼叫(())和成員訪問箭頭(->)等操作符必須定義為成員,將這些操作符定義為非成員函式將在編譯時標記為錯誤。像賦值一樣,復合賦值操作符通常應定義為類的成員,與賦值不同的是,不一定非得這樣做,如果定義非成員復合賦值操作符,不會出現編譯錯誤。改變物件狀態或與給定型別緊密聯絡的其他一些操作符,如自增、自減和解引用,通常就定義為類成員。對稱的操作符,如算術操作符、相等操作符、關係操作符和位操作符,最好定義為普通非成員函式。

5、  一般而言,輸出操作符應輸出物件的內容,進行小限度的格式化,它們不應該輸出換行符。

6、  類定義下標操作符時,一般需要定義兩個版本:乙個為非 const 成員並返回引用,另乙個為 const 成員並返回 const 引用。  

7、  為了與內建型別一致,字首式操作符應返回被增量或減量物件的引用。字尾式操作符應返回舊值(即尚未自增或自減的值),並且應作為值返回,而不是返回引用。字尾式操作符函式接受乙個額外的(即無用的)int 型形參。使用字尾式操作符進,編譯器提供 0 作為這個形參的實參。  

8、  函式呼叫操作符必須宣告為成員函式。乙個類可以定義函式呼叫操作符的多個版本,由形參的數目或型別加以區別。定義了呼叫操作符的類,其物件常稱為函式物件,即它們是行為類似函式的物件。函式物件經常用作通用演算法的實參。並且比普通函式更靈活。

9、  標準庫提供了一組函式介面卡,用於特化和擴充套件一元和二元函式物件。函式介面卡分為如下兩類:(1) 繫結器,是一種函式介面卡,它通過將乙個運算元繫結到給定值而將二元函式物件轉換為一元函式物件。 (2) 求反器,是一種函式介面卡,它將謂詞函式物件的真值求反。bind1st 和 bind2nd。每個繫結器接受乙個函式物件和乙個值。正如你可能想到的,bind1st 將給定值繫結到二元函式物件的第乙個實參,bind2nd 將給定值繫結到二元函式物件的第二個實參。標準庫還定義了兩個求反器:not1 和 not2。not1 將一元函式物件的真值求反,not2 將二元函式物件的真值求反。

操作符過載

ifndef vertex h define vertex h class vertex vertex float px float py float pz vertex operator const vertex p vertex operator const vertex p void oper...

操作符過載

1.操作符是靜態方法,返回值表示操作結果,引數是運算元。2.操作符過載需要在過載的操作符前加上operator關鍵字。3.最好少用操作符過載,只有在意義明晰而且與內建類的操作一致時才適合使用,以免造成混亂。以建立的分數類 fraction 中的 為例,該分數類中有兩個int型的私有屬性 分子 num...

過載操作符

1.過載操作符1.1 限制過載操作符具有以下限制 1 只有c 預定義的操作符集中的操作符才可以被過載 2 對於內建型別的操作符,它的預定義不能被改變,應不能為內建型別過載操作符,如,不能改變int型的操作符 的含義 3 也不能為內建的資料型別定義其它的操作符 4 只能過載類型別或列舉型別的操作符 5...