catalog
- Base
-
- **二目**:
- **單目**:
- **多目**:
Base
二目:
A * B
對A 進行:
operator * ( B )
的成員函數。
單目:
這是比較複雜,因為他不像二目 他沒有後面的B,也即是: 運算符函數參數 按理說是空的!!
而且,有些單目運算符 還有“前置”! 這就比二目複雜的多
二目的話,因為是對A重載的,即對A來說 肯定是“後置”,運算符後面的B,即是函數參數,這非常符合人的思路!!
對單目運算符的重載,确實不符合人的思考。是以,對于單目運算符,最好牢記住他的規則!!!
函數參數為空,則為前置。 放一個(int)參數,表示後置
這是語言标準定死的, 牢記即可。 而且,不是所有符号都能重載
即,單目運算符 要看:函數參數,來确實是 前置、後置
T operator++(){ // ++ t
DE<< "pre ++"; ED;
}
T operator++(int){ // t ++
DE<< "post ++"; ED;
}
T operator*(){ // *t
DE<< "pre *"; ED;
}
T operator!(){ // !t
DE<< "pre !";
}
傳回值T,可以自定義。
多目:
括号
t() 、t(1)、t(1, 2)
括号的用法很特别,因為是他“多目”。
在這裡,t即是一個類,運算符是:
()
,參數是:
1,2
(當然,逗号
,
不用關注)
class ST{
T operator()(){ } // t()
T operator()(int){ } // t(1)
T operator()(int, int){ } // t(1,2)
注意這裡,非常容易寫錯! operator後面是
()
,即要進行重載的運算符,别把他當成是函數參數清單。
重載了
()
的類,也稱為: 仿函數Funtor