大佬教程收集整理的这篇文章主要介绍了我应该使用哪种C运算符重载变体?而且,为什么?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@R_609_10675@用哪种变体?为什么?
class MyClass { int myInteger; double myDouble; public: MyClass(int i,double d) { myInteger = i; myDouble = d; } // Variation - 1 //-------------- MyClass operator +(MyClass rhsObj) { return MyClass(this->myInteger + rhsObj.myInteger,this->myDouble + rhsObj.myDoublE); } // Variation - 2 //-------------- MyClass &operator +(MyClass &rhsObj) { rhsObj.myInteger = this->myInteger + rhsObj.myInteger; rhsObj.myDouble = this->myDouble + rhsObj.myDouble; return rhsObj; } // Variation - 3 //-------------- MyClass &operator +(MyClass &rhsObj) { this->myInteger = this->myInteger + rhsObj.myInteger; this->myDouble = this->myDouble + rhsObj.myDouble; return *this; } }; int main() { MyClass objOne(10,10.5); MyClass objTwo(20,20.5); MyClass objThree = objOne + objTwo; }
分配运算符(=)应该是什么情况?应该使用哪种变体?
@H_478_5@myClass的用户期望它遵循The Principle of Least Astonishment,并且永远不会期望看到由于添加而修改右侧.使用COnst更多将强制执行此操作,并将作为文档.如果您想修改左侧,请使用=.像这样:
// Plus: Modify neither the left nor the right //-------------- MyClass operator +(const MyClass& rhsObj) const { return MyClass(myInteger + rhsObj.myInteger,myDouble + rhsObj.myDoublE); } // Increment: Modify the left //-------------- MyClass& operator +=(const MyClass& rhsObj) { myInteger += rhsObj.myInteger; myDouble += rhsObj.myDouble; return *this; }
以上是大佬教程为你收集整理的我应该使用哪种C运算符重载变体?而且,为什么?全部内容,希望文章能够帮你解决我应该使用哪种C运算符重载变体?而且,为什么?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。