操作符過載

2022-05-01 05:00:11 字數 1485 閱讀 9366

過載的運算子是具有特殊名字的函式,名字由關鍵字operator和其後要定義的運算符號共同組成, 過載的運算子也包含返回型別,引數列表以及函式體。過載運算子函式的引數數量和該運算子作用的運算物件數量一樣多。一元運算子有乙個引數,二元運算子有兩個引數。對於二元運算子,左側運算物件傳遞給第乙個引數,右側運算物件傳遞給第二個引數。

cout<

如果乙個運算子函式是成員函式,則它的第乙個(左側)運算物件繫結到隱式的this指標上。成員運算子函式的引數數量比運算子的運算物件總數少乙個。運算子作用與內建型別的運算物件時,無法改變運算子的含義。int operator + (int, int ); 錯誤。對於運算子的使用: a+b, operator+ (a,b); 都呼叫了非成員函式operator +, a,b 為兩個實參。 a+=b, a.operator+=b,對成員運算子函式的條呼叫。

輸入輸出符<>

通常情況,輸出運算子的第乙個形參是乙個非  常量ostream 物件的引用。ostream 是非 常量是因為流寫入內容會改變狀態,形參是引用是因為無法直接複製乙個ostream 物件。 第二個引數一般是乙個常量的引用(是引用是為了避免複製實參)形參是常量是因為列印內容不會改變物件的內容。operator<< 一般要返回其ostream形參。

os 是第一非常量物件的引用。第二個引數是常量物件的引用。

輸入輸出運算子必須是非成員函式,  如果輸入輸出定義為成員函式,則左側的運算物件要為類的物件。

sales_data data;

data因此為類定義io運算子時,必須將其定義為非成員函式。

算術運算子關係運算子:

一般將算術與關係運算子定義為非成員函式以允許對左側或右側的運算物件進行轉換。 因為這些運算子一般不需要改變運算物件的狀態,所以形參都是常量的引用。

相等運算子:

如果定義了==一般要定義!=,如果某個類在邏輯上有相等性的含義,則該類應該定義operator ==, 這樣做使得使用者更容易使用標準庫演算法來處理這個類。

關係運算子類似==

賦值運算子:

一般我們使用拷貝賦值或移動賦值運算子,但是我們也可以定義第三種賦值運算子,如在vector中,該運算子接受花括號內的元素作為引數: 

vectorv;

v=;同樣可以把這個運算子新增到別的類中:

為了與內建型別的賦值運算子保持一致,新運算子將返回其左側運算物件的引用。不論形參的型別是什麼,賦值運算子都必須定義為成員函式。

下標運算子:

操作符過載

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...