操作符重载的实现方式有两种,即通过“友元函数”或者“类成员函数”。
(friend)返回类型 operator 操作符(形参表)
利用友元函数重载二元操作符”-“时,形式参数是两个,而利用类成员函数时,形式参数却只有一个。这时因为类成员函数中存在this指针,这相当于一个参数,所以类成员实现操作符重载需要的形式参数比原来少一个。也正是因为这个原因,友元函数实现的操作符重载是有限制的,比如:[] ,(),->和 =不能利用友元函数实现运算符的重载。
在实际开发过程中,单目运算符建议重载为成员函数,而双目运算符建议重载为友元函数。通常下双目运算符重载为友元函数比重载为成员函数更方便,但是有时双目运算符必须重载为成员函数,例如赋值运算符=。
运算符重载遵循原则:
(1)C++中只能对已有的C++运算符进行重载,不允许用户自己定义新的运算符。
(2)C++中绝大部分的运算符可重载,除了成员访问运算符.,作用域运算符::,长度运算符sizeof以及条件运算符?:。
(3)运算符重载后不能改变运算符的操作对象(操作数)的个数。如:"+"是实现两个操作数的运算符,重载后仍然为双目运算符。
(4)重载不能改变运算符原有的优先级和原有的结合性。
(5)运算符重载不能全部是C++中预定义的基本数据,这样做的目的是为了防止用户修改用于基本类型数据的运算符性质。