C 過載運算子函式需知

2021-07-06 09:08:04 字數 1152 閱讀 2402

過載的運算子是具有特殊名字的函式:

(1) 名字由關鍵字 operator 和其後要定義的運算符號(+、-、/、* 等組成);

(2) 和其他的函式一樣,也包含返回型別、引數列表以及函式體。

//例如

intoperator+(int,int);

//錯誤,不能為int重定義內建的運算子

可以被過載的運算子

不能被過載的運算子

以下的兩條語句都等價的呼叫了成員函式 operator+= , 將this 繫結到data1 的位址,將data2 作為實參傳入了函式。

data1 += data2;               //表示式的方式呼叫

data1.operator += (data2); //等價的普通函式呼叫方式

以下的兩條語句都等價的呼叫了非成員函式 operator+ ,傳入data1 作為第乙個實參,傳入data2 作為第二個實參。

data1 + data2;             //表示式方式呼叫

operator+(data1,data2); //等價的函式呼叫

注意: 是不應該,並不是不能。

因為某些運算子指定了運算物件求值的順序。使用過載的運算子本質上是一次函式呼叫,所以這些關於運算物件求值順序的規則無法應用到過載的運算子上。

例如,如果將 + 定義為string 類的成員函式,下面的使用將會出現問題:

string    s = "world" ;

string u = "hello" + s;

// 上面語句等價於 "hello".operator+(s) ,顯然是錯誤的

C 過載運算子

運算子過載是一種形式的c 多型。在c 中,編譯器有能力把乙個由資料 物件和操作符共同組成的表示式,解釋為對乙個全域性或成員函式的呼叫。該全域性或成員函式被稱為操作符函式,通過重定義操作符函式,可以實現針對自定義型別 結構,類 的運算法則,並使之與內建型別一樣參與各種表示式。過載運算子可使 看起來更加...

C 過載運算子

本文主要講述加號運算子 自增運算子 流提取運算子運 流插入運算子 先給出vector類 class vector 建構函式 vector const vector v 拷貝建構函式 vector operator const vector v 過載 vector operator 過載前置自增運算子...

C 過載運算子

過載的運算子是帶有特殊名稱的函式,函式名是由關鍵字 operator 和其後要過載的運算子符號構成的。與其他函式一樣,過載運算子有乙個返回型別和乙個引數列表。如果我們定義的函式為類的成員函式 box operator const box 如果我們定義的函式為非成員函式,那麼我們需要為每次操作傳遞兩個...