C++ 类设计总结回顾------运算符重载
运算符与类相结合,运算符产生新的含义,称之为运算符重载。重载运算符可以使函数的运算看起来更为自然。例如允许使用+将两个对象相加。编译器将根据操作数的数目和类型决定使用哪种加法定义。这种运算符重载隐藏了内部激励,强调了实质。
运算符重载的格式:类成员函数:返回类型 operator 被重载的运算符(参数) const (ps:一般在在运算符重载函数的末尾添加const,避免函数通过this指针意外修改数据)
友元函数: friend 返回类型 operator 被重载的运算符 (参数,const 类型的引用)(ps:这里的const跟上边的const作用相同)
相同条件下的运算符重载,类成员函数中的参数比友元函数中少一个,少的那个就是this;两种格式的比较,就是说为什么已经有了类成员函数型的运算符重载,还要加上友元函数的运算符重载。在为类重载两元运算符重载时(带两个参数的运算符,比如+ - * /), 例如:C = A + b,其实是被转换成 C = A.operator+b,这里A C是两个class Time型的对象,b是一个int型的数值。但是当遇到C = b + A时,编译器就不知道该怎么做了,是C = b.operator + A吗? 很明显是不可能的。(ps:运算符左侧的操作数就是被调对象);这是就轮到友元函数上场了,friend 返回类型 operator+(int b,const Time & t),两种函数类型的运算符重载完美解决上述问题。
重载的限制:
1 重载后的运算符必须至少有一个操作数是用户自己定义的,这是为了防止用户为标准类型冲在运算符,就是不能把+重载为计算两个double类型的差之类重载;
2 不能修改运算符原来的句法规则,说白了就是不能把一元、二元。。。运算符之间不允许胡乱重载,例如二元运算符不允许重载为一元运算符;
3 不能创建新的运算符;
以及:
运算符 | 建议 |
所有一元运算符 | 成员函数 |
= ( ) [ ] -> | 必须是成员函数 |
+= -= /= *= ^= &= != %= >>= <<= , 似乎带等号的都在这里了 | 成员函数 |
所有其它二元运算符, 例如: –,+,*,/ | 友元函数 |
<< >> | 必须是友元函数 |
表格参考:https://www.cnblogs.com/sexybear/p/4551742.html