C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了我应该使用哪种C运算符重载变体?而且,为什么?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
这里给出了加法运算符()的重载的3种变化.

@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;
}

演示:http://ideone.com/8oarA

@H_197_30@

大佬总结

以上是大佬教程为你收集整理的我应该使用哪种C运算符重载变体?而且,为什么?全部内容,希望文章能够帮你解决我应该使用哪种C运算符重载变体?而且,为什么?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。