编写操作符方法的实现



所以我有一个LongInt类,它将对+和*操作符有新的定义。头文件中的初始化如下:

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

然而,在我的实现文件中,我定义了在头文件中找到的方法,VS不识别操作符+函数或操作符*函数在头文件中列出。我使用的代码是:

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

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

当我试图定义操作符时,为什么这段代码不起作用?

friend关键字仅在类内部声明或定义操作符时使用;当在类内部将操作符声明为friend并在其他地方定义它时,friend仅用于声明,而不是用于定义。此外,在类中声明为friend的函数实际上是名称空间作用域中的自由函数,而不是类成员。因此,您的定义应该看起来更像:

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

有关进一步的阅读材料,请阅读以下页面:c++ FAQ: Friends

你重写了一个操作符…你使用操作符"调用"它:

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

最新更新