C 運算子 過載

2021-08-03 08:32:45 字數 2021 閱讀 6497

期末了啊,大一就要結束了,之前高三復讀的同學考了乙個好成績。可能要去我高三的理想學校蘇州大學。啊。。。希望我能考研考上蘇大把,現在說考研是不是有點早啊。

運算子過載的方法是定義乙個過載運算子的函式,所以運算子過載是通過定義函式來實現的。運算子過載實質上是函式的過載。格式

函式型別 operator 運算子名稱(形參表)

{ 語句 }

operator 是關鍵字,是專門用於定義過載運算子的函式,例如 operator + 的意思是:對運算子+過載的函式,## 函式名就是 operator + ##下面對運算子+過載,使之能用於兩個複數相加。

class

complex

complex(double x,double y)

complex operator +(complex &c2);

void display();

private:

double

real;

double imag;

};complex complex::operator +(complex &c2)

. (成員訪問運算子)

.* (成員指標訪問運算子)

:: (域運算子)

sizeof (長度運算子)

?: (條件運算子)

如=的結合性 從右到左 過載之後還是右到左

1.=可以用於每乙個類物件,可以利用他在同類物件中互相賦值。

2.& 位址運算子也不必過載,他能返回類物件在記憶體中的起始位址。

上面的實現複數相加的 operator是作為 成員函式的。

+應該有兩個引數,但是在上例**中只有乙個形參表。因為有乙個引數是隱含的,運算子函式是通過this指標隱式的訪問類物件的成員,可以看到operator+訪問了兩個物件中的成員,乙個是形參c2 另乙個就是this指標指向的物件,this->real 就是 c1.real

//友元函式實現+的過載

class

complex ;

complex operator +(complex &c1,complex &c2)

如果將運算子過載函式作為成員函式,他可以通過this指標自由的訪問本類的資料成員,因此可以少寫乙個函式的引數嗎,將雙目運算子過載為友元函式時,由於友元函式不是該類的成員函式,因此雜誌函式的形參列表中必須有兩個引數,不能省略1.c++規定,賦值運算子=,下標運算子[ ],函式呼叫符() 成員運算子 -> 必須作為成員函式

2。流插入《和流提取》 、型別轉換運算子(不能定義為類的成員運算子,只能作為友元函式

3.一般將單目運算子和復合運算子(+=,/=之類的)過載為成員函式

4.一般將雙目運算子

總結:作為友元函式的:<< >> 和雙目運算子以型別轉換符

* 作為成員函式有單目運算子和復合運算子、賦值運算子=,下標運算子[ ],函式呼叫符() 成員運算子 ->*

有時候我們需要直接輸出乙個類物件,所以我們需要對它們過載。

函式形式

istream & operator >>(isream& ,自定義類 &);

ostream & operator >>(osream& ,自定義類 &);

過載運算子》(因此,只能將過載》和《的 函式作為友元函式,而不能將他們定義為成員函式,如果將它們定義為成員函式,那麼左側的運算物件將是我們的類的乙個物件,假設輸入輸出類是某個類的成員,則它們也必須是istrea或ostream類的成員。然而這兩個類屬於標準庫,並且我們無法給標準庫的類新增任何成員。

過載《輸出複數

class complex;

ostream &operator<

C 運算子過載 過載特殊運算子

賦值運算子用於同類物件間的相互賦值。賦值運算子只能被過載為類的非靜態成員函式,不能過載為友元函式和普通函式。對於使用者自定義的類而言,如果沒有過載賦值運算子,那麼c 編譯器會為該類提供乙個預設的過載賦值運算子成員函式。預設賦值運算子的工作方式是按位對拷,將等到右邊物件的非靜態成員拷貝給等號左邊的物件...

C 運算子過載賦值運算子

自定義類的賦值運算子過載函式的作用與內建賦值運算子的作用類似,但是要要注意的是,它與拷貝建構函式與析構函式一樣,要注意深拷貝淺拷貝的問題,在沒有深拷貝淺拷貝的情況下,如果沒有指定預設的賦值運算子過載函式,那麼系統將會自動提供乙個賦值運算子過載函式。賦值運算子過載函式的定義與其它運算子過載函式的定義是...

C 運算子過載轉換運算子

為什麼需要轉換運算子?大家知道對於內建型別的資料我們可以通過強制轉換符的使用來轉換資料,例如 int 2.1f 自定義類也是型別,那麼自定義類的物件在很多情況下也需要支援此操作,c 提供了轉換運算子過載函式 它使得自定義類物件的強轉換成為可能。轉換運算子的生命方式比較特別,方法如下 operator...