首页 > 解决方案 > 如何正确使用二元运算符重载

问题描述

二元运算符应该如何重载,
CMyClass operator-(const CMyClass& oMyClass) const 或者
CMyClass operator-(const CMyClass& oMyClass)
两者有什么区别,第一个调用能否完全替换第二个。
我发现仅使用第二个我将无法添加const MyClass为 LHS。

#include <iostream>
class CMyClass
{
    int m_y{ 0 };
    int m_x{ 0 };

public:
    CMyClass()
    {
    }

    CMyClass(int x, int y) :
        m_x{ x }, m_y{ y }
    {}

    CMyClass operator-(const CMyClass& oMyClass) const
    {
        CMyClass oReturn;
        oReturn.m_x = m_x - oMyClass.m_x;
        oReturn.m_y = m_y - oMyClass.m_y;
        return oReturn;
    }

    CMyClass operator-(const CMyClass& oMyClass)
    {
        CMyClass oReturn;
        oReturn.m_x = m_x - oMyClass.m_x;
        oReturn.m_y = m_y - oMyClass.m_y;
        return oReturn;
    }
};

int main()
{
    const CMyClass p1(10, 10);
    const CMyClass p2(5, 5);

    CMyClass p3 = p1 - p2;
    // ...
}

标签: c++c++11operator-overloadingc++17

解决方案


推荐阅读