运算符重载函数为朋友?

时间:2017-02-09 03:02:28

标签: c++ c++11 friend

我有一个代表特殊号码的班级。

class SecretInteger
{
private:
    unsigned int *data;
    size_t length;

public: 
    SecretInteger operator+(const SecretInteger other) const;
}

我不能允许我的代码的任何其他部分访问data变量。但是,我的operator+函数必须能够看到它。通常在这种情况下,我知道使用friend关键字是唯一的方法。但是,当我写道:

friend SecretInteger operator+(const SecretInteger other);

它声称operator+不能被声明为朋友,即使我之前写过friend std::ostream& operator<<(std::ostream& stream, const SecretInteger val);并且它工作正常。

我可以选择哪些选项?如果我有像

这样的公共方法

const *unsigned int getData() const;我认为即使这样,它实际上并没有使变量const正确吗?我真的不想使用getData()方法,而只是声明具有friend访问权限的函数。

1 个答案:

答案 0 :(得分:3)

您不会将成员函数声明为friendfriend是为非成员函数提供对内部的访问权限,而operator+的一个操作数重载是成员函数。

无论如何,如果你正确地实施二元运算符,你根本不需要给出友谊。实施+=作为成员函数(不需要friend,类总是&#34;朋友&#34;与自己),然后实现非成员+运算符使用+=访问内部的+=,以避免整个友谊问题。

重载can be found here的基本规则应该会有所帮助。