天天看点

重载运算符作为成员函数还是非成员函数

一、定义为成员函数的运算符

1. 赋值、调用、下标、成员访问箭头运算符(=、()、[]、->)

2. 改变对象状态的运算符或者与给定类型密切相关的运算符(递增++、递减--、解引用*)

3. 复合赋值运算符(注:它也可以定义为非成员函数)

二、定义为非成员函数的运算符

1. 具有对称性的,即能转换任意一端的运算对象的运算符(算术、相等性、关系、位运算符) 

2. 输入输出运算符

三、为什么一定要定义为成员函数

string s;
// 赋值运算符=是string的成员函数
s = "world";	// 正确 
"world" = s;	// 错误