在C++包含很多运算符,但以下几个运算符不能由用户定义:
::(作用域解析;)
,(成员选择)
.* (通过到成员的指针做成员选择)
?:三元条件运算符
sizeof和typeid
运算符函数的名字是由关键字operator后跟对应的运算符构成的;例如operator<<。运算符函数的定义和使用都可以像其他函数一样。使用运算符不过是显示调用运算符函数的一种简写形式。例如
void f(complex a,complex b)
{
complex c=a+b; //简写
complex d=a.operator+(b);//显示调用
}
一个运算符函数必须或者是一个成员函数,或者至少有一个用户定义类型的参数(重新定义运算符new和delete的函数则没有此项要求)。这一规则就保证了用户不能改变原有表达式的意义,除非表达式中包含有用户定义类型的对象。特别的,不能定义只对指针进行操作的运算符函数。
忠告:
1.定义运算符主要是为了模仿习惯使用方式
2.对于大型运算对象,请使用const引用参数类型
3.对于需要访问表示的操作,优先考虑作为成员函数而不是作为非成员函数
4.对于对称的运算符采用非成员函数
5.将只有一个“大小参数”的构造函数做成explicit
运算符重载的内容应该还是挺多的,但却不知道如何写,看来还是文笔太差了,有机会再补上吧。