Operator Overloading..
可以作为成员函数,也可作为非成员函数(是不是友元无所谓,通常是作为友元)。
单参的构造函数。。。(参数可以只有一个,但是不能有默认值,也可以是多个参数但只有一个没有默认值)。不懂干嘛的。。
格式: operator +( ) {};
不能重载的运算符: :: . .* ?: sizeof typeid 共6个。
重载的时候必须有一个用户自定义的类型,否则会重定义。
重载运算符的时候不能改变原有的优先级,最好不改变该运算符原有的性质,例如交换律结合律等。
当作为成员函数时:
前缀一元: @aa == aa.operator@()
后缀一元: aa@ == aa.operator@(int)
二元: aa@bb == aa.operator@(bb)
不作为成员函数时:
前缀一元: @aa == operator@(aa)
后缀一元: aa@ == operator@(aa,int)
二元: aa@bb == operator@(aa,bb)
tips:
一般情况下,一元运算符定义为成员函数,二元运算符定义为友元。
"=""()""->""[]"四种运算符只能定义为成员函数。
如果需要显式转换,则一般定义为非成员函数。
转换运算符 Class::operator Type();只能重载为成员函数。为用户自定义转换。
"[]"重载返回值必须为引用。可以作为左值。