在C ++中覆盖运算符的首选方法是什么

时间:2016-11-20 10:33:42

标签: c++ operators friend

我一直在重写这样的运营商:

function getmoviex(moviex) {
    $("#moviex_list").text("");
    $.each(moviex, function (i) {
        $("#moviex_list").append("<li>" + this + "</li>");
    });
}

class MyClass {
public:
    ...
    MyClass operator+(const MyClass&) const;

private:
    int some_number = 5;
}

但今天我意识到你也可以使用'friend'关键字创建运营商:

MyClass MyClass::operator+(const MyClass& rhs) const
{
    return MyClass(some_number + rhs.some_number);
}

class MyClass {
public:
...
friend MyClass operator+(const MyClass&, const MyClass&);

private:
    int some_number = 5;
} 

考虑到我需要左侧和右侧操作员以及我(也尝试)遵循核心指南,这将是首选方式?

1 个答案:

答案 0 :(得分:0)

首选的方法是不要把它变成朋友:

MyClass operator+(MyClass lhs, Myclass const& rhs)
{
    return lhs += rhs;
}

当然,这确实依赖于operator+=,但这是更基本的操作。 +=改变其左侧,应该是其成员。