所謂運算子過載其實就是對於運算子針對不同操作物件而實現不同功能,其實質就是函式過載(函式過載前面有一篇介紹)。實現過程就是先把運算表示式轉化為對運算子函式的呼叫,把運算物件轉化為運算函式的實參,然後根據實參的型別確定需要呼叫的函式。另外,c++標準規定了一些不能過載的操作符,分別是:1.類屬關係運算子「 . 」,2.成員指標運算子「 . * 」,3.作用域分辨符「 :: 」,4.三目運算子「 ?: 」。
運算子過載形式有兩種,要麼過載為類的非靜態成員函式,要麼過載為非成員函式。
一般過載的語法格式為:
返回型別 operator 運算子(形參)
下面舉個過載為類的非靜態成員函式的例子:
首先建乙個簡單的時間類:
class time
void setminute(int m)
void setsecond(int s)
int gethour()
int getminute()
int getsecond()
};先看一下主函式:
int main()
主函式裡要實現兩個物件相加還有單個物件的前置++和後置++運算
看一下三個運算符號過載函式的實現;
time time::operator +(time &t)
這裡返回值是time類的物件,至於形參表只有乙個物件是因為過載為類的成員函式時,第乙個運算元會被作為函式呼叫的目的物件,無需出現在引數表裡,函式體中可以直接訪問第乙個運算元的成員,而如果過載為非成員函式時,則運算子的所有運算元都進行顯示地引數傳遞。
//前置++
time & time::operator ++()
}return *this;
}//後置++
time time::operator ++(int)
關於運算子過載
之前看 effective c 的時候,對這一部分印象比較深刻,雖然讀的時候有寫筆記,但是現在還是寫下來我對這一部分理解。詳細的內容可以看條款19 分清成員函式,非成員函式和友元。條款19的結論如下 只有在下列情況下,讓函式f成為類c的非成員函式。其餘情況,f都宣告為c的成員函式。1 operato...
關於運算子過載 總結
1 運算子過載是為了對使用者自定義資料型別的資料的操作與內定義的資料型別的資料的操作形式一致。不能過載的5個運算子 成員指標訪問運算子 域運算子 sizeof長度運算子 條件運算子 成員訪問符。運算過載的三種方式 普通函式,友元函式,類成員函式。當過載為成員函式時,雙目運算子僅有乙個引數。對單目運算...
關於過載運算子
關於c 中的過載運算子 學習部落格1 學習部落格2 記得好久之前學 dijkstra 的堆優化的時候 gxb 神仙給我講過,當時就是不明白感覺 gxb 都要崩潰了的亞子,好歹算是知道了,但是隨著時間的流逝,他竟然趁我不注意從我腦子裡跑了!gxb 正拿著刀在趕來的路上 我們可以重定義或過載 c 內的大...