1、当运算符作用于类对象时,C++语言允许我们为其制定新的含义。同时,我们也能自定义类类型的转换规则。
2、除了重载的函数调用运算符operator()之外,其他重载运算符不能含有默认实参。
3、如果一个运算符函数是成员函数,则他的第一个(左侧)运算对象绑定到隐式的this指针式,因此成员运算符函数的(显式)参数数量比运算符的对象总少一个。
4、对于一个运算符函数来说,它或者是类的成员,或者至少含有一个类类型的参数。
5、只能重载已有的运算符,无权发明新的运算符。
6、(+、-、*、&)这四个既是一元运算符也是二元运算符。
7、重载不能改变运算符的优先级。
8、一般情况下,单目运算符最好重载为类的成员函数,双目运算符重载为类的友元函数。
9、(:: .* . ?:)不能被重载
10、双目运算符(赋值=、调用()、下标[ ]、成员访问箭头->)不能重载为类的友元函数,必须是成员函数。
11、复合运算符应该是成员函数,但非必须。
12、改变对象状态的运算符或者与给定类型密切相关的运算符,如递增、递减和解引用 运算符,通常应该是成员函数。
13、具有对称性的运算符可能转换任意一端的运算对象,例如算术、相等性、关系和位运算符等等,通常应该是普通的非成员函数。
14、如果想提供含有类对象的混合型表达式,则运算符必须定义成非成员。
15、当我们把运算符定义为成员函数时,,它的左侧运算对象必须是运算符所属类的一个对象。
16、输出<<、输入>>运算符
ostream & operator <<( ostream & os,const Sales_data &item)//第二个参数为引用避免复制实参,为const因为一般输出操作不改变对象的内容
{
os<<item.isbn().....;
return os;
}//返回ostream的形参
(1)必须是非成员函数。否则它的左侧运算对象必须是运算符所属类的一个对象,则Sale_data data;data<<cout;
17、算术运算符和关系运算符
一般情况下把他们定义为非成员运算符以允许对左侧和右侧的对象进行调换。
18、相等运算符:非成员函数
19、赋值运算符:必须是成员函数,返回左侧对象的引用
20、符合运算符:成员函数,返回左侧对象的引用