有关重载+和+=的问题
在重载+和+=的时候,有两种选择,一种是先重载+=,并让它成为类的成员函数,在重载+时,可以在方法中调用+=来完成加法功能
第二种选择是先重载+,而重载+=时,在方法中直接调用+来完成其功能
据说第一种方式更好,但不知道为什么,第二种方式有什么缺陷呢?希望大家给予指点,多谢了~
[解决办法]
采用第一种方案,即先用成员函数重载+=操作符,再用全局函数重载+操作符,使用成员函数+=操作符实现.原因如下:
1、采用自赋值函数,可以直接访问成员变量,而采用全局函数,需要先在类里面先声明友元函数。特别是在模板类里面,无法声明模板的友元函数
template <typename ValueType,unsigned int Dimension>
class VectorT
{
typedef VectorT <ValueType,Dimension> my_type;
friend my_type operator+(const my_type&,const my_type&); //错误
};
2、编译器看到a+b表达式时,先搜索成员+=操作符,然后再搜索全局+操作符;
3、+=操作符效率比较高,+操作符返回一个新的类实例,多一次实例构造,即便是返回值优化.