天天看點

運算符重載Base

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

繼續閱讀