编写运算符方法的实现

时间:2011-04-06 01:18:45

标签: c++ header operator-overloading add long-integer

所以我有一个LongInt类,它将为+和*运算符提供新的定义。头文件中的初始化如下所示:

friend LongInt operator+(const LongInt& x, const LongInt& y);
friend LongInt operator*(const LongInt& x, const LongInt& y);

但是在我的实现文件中,我在定义标题中找到的方法时,VS无法识别标题中列出的operator +函数或operator *函数。我正在使用代码:

friend LongInt LongInt::operator+(const LongInt& x, const LongInt& y)
{

}

friend LongInt LongInt::operator*(const LongInt& x, const LongInt& y)
{

}

当我试图定义运算符时,有什么想法为什么这段代码不起作用?

2 个答案:

答案 0 :(得分:2)

friend关键字仅在声明或定义类内的运算符时使用;当将运算符声明为类的friend并在其他地方定义它时,friend仅用于声明,而不是定义。此外,在类中声明为friend的函数实际上是命名空间范围内的自由函数,而不是类成员。所以,你的定义看起来应该更像:

LongInt operator +(LongInt const& x, LongInt const& y) { /*...*/ }
LongInt operator *(LongInt const& x, LongInt const& y) { /*...*/ }

如需进一步阅读材料,请阅读以下页面:C++ FAQ: Friends

答案 1 :(得分:0)

你覆盖了一个操作员......你用操作员“调用”它:

LongInt foo;
LongInt bar;
LongInt foobar = foo + bar;