我有一个代表特殊号码的班级。
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
访问权限的函数。
答案 0 :(得分:3)
您不会将成员函数声明为friend
,friend
是为非成员函数提供对内部的访问权限,而operator+
的一个操作数重载是成员函数。
无论如何,如果你正确地实施二元运算符,你根本不需要给出友谊。实施+=
作为成员函数(不需要friend
,类总是&#34;朋友&#34;与自己),然后实现非成员+
运算符使用+=
访问内部的+=
,以避免整个友谊问题。
重载can be found here的基本规则应该会有所帮助。