過載的運算子是具有特殊名字的函式:(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 如果我們定義的函式為非成員函式,那麼我們需要為每次操作傳遞兩個...