我应该使用哪种C运算符重载变体?而且,为什么?
发布时间:2020-12-16 10:46:04 所属栏目:百科 来源:网络整理
导读:这里给出了加法运算符()的重载的3种变化. 我应该使用哪种变体?为什么? class MyClass { int myInteger; double myDouble; public: MyClass(int i,double d) { myInteger = i; myDouble = d; } // Variation - 1 //-------------- MyClass operator +(MyCla
这里给出了加法运算符()的重载的3种变化.
我应该使用哪种变体?为什么? 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; } 分配运算符(=)应该是什么情况?应该使用哪种变体? 解决方法
你真的想要一个和三个变化.
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; } 演示:http://ideone.com/8oarA (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |