赋值、累加运算符
class ST{
ST& operator?( ... ){ ' 其中的?,可以是: = += -= *= '
// .....
return *this;
}
}
这是赋值运算符重载,非常非常官方的实现方式,诸多stl容器都是这样实现的。
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