過載運算子
一過載運算子的限制
在我們定義了類之後,出現了一些新的資料型別,因此我們要根據資料型別的不同要重新編寫我們的運算子,在c++中大部分的預定義的運算子都可以被過載,但以下運算子不能被過載 "." ".*" "::" "?" "sizeof"。
過載運算子函式可以對運算子做出新的解釋,即定義使用者所需要的各種操作。但運算子過載後,原有的基本語句不變,包括
1 不改變運算子的優先順序
2 不改變運算子的結合性
3 不改變運算子所需要的運算元
要注意的是不能創新的運算子,只有系統預定義的運算子才能被過載。
二過載運算子的語法形式
運算子函式是一種特殊的成員函式或友元函式。成員函式的語句格式為:
型別 類名::operator op(參數列)
//相對於該類定義的操作
型別是函式的返回型別。「類名」是要過載該運算子的類。「op」表示要過載的運算子「參數列」列出該運算子所需要的運算元
過載運算子
的函式不能有預設引數.
過載的運算子
必須和使用者定義的自定義型別一起使用,其引數至少應有乙個是類物件(或類物件的引用)
防止使用者修改用於標準資料型別的運算子
用於類物件的運算子
一般必須過載,但有兩個例外「=」和「&」不必過載
"=」,系統有預設的過載函式,就是逐個複製成員
,除非有必要(像動態分配記憶體的內容)就不必過載
"&",它能返回類物件在記憶體中的起始位址
要按習慣過載,雖然可以但還是不要把「+」過載成 減法,否則有違過載的初衷
運算子過載函式可以是類成員
函式(如「+」左邊必須是類),類友元
函式(需要訪問類私有成員
時使用很方便),普通函式(訪問類私有成員
時不太方便)
過載運算子有兩種方式
一種是成員函式過載運算子,另一種是友元函式過載運算子。
過載為類的成員函式
返回型別(類名::)operator運算子(形參表)
過載為類的友元函式
friend 函式型別 operator 運算子(形參表)
#include
using
namespace
std;
class
coordinate
coordinate &operator--()
coordinate operator--(int
)
coordinate operator+(coordinate &c)
public
: int
m_ix;
intm_iy;
};
intmain(
void
)
過載運算子總結
基本知識點 不可過載的算符 sizeof 可過載的運算子 等 過載運算子的限制 不改變運算子的優先順序 不改變運算子的結合性 不改變運算子所需要的運算元 不能改變新的運算子 可對運算子作出新的解釋,原有的基本語義不變 運算子函式可過載為成員函式和友元函式 一元運算子 過載成員函式 object.op...
過載運算子
題目描述 定義乙個矩形類,資料成員包括左下角和右上角座標,定義的成員函式包括必要的建構函式 輸入座標的函式,實現矩形加法,以及計算並輸出矩形面積的函式。要求使用提示中給出的測試函式並不得改動。兩個矩形相加的規則是 決定矩形的對應座標分別相加,如 左下角 1,2 右上角 3,4 的矩形,與 左下角 2...
過載運算子
include include using namespace std class test test const int a v a test const test t1 v t1.v 以下過載小於號 比較兩個物件的大小 bool operator const test t1 const 比較物件...