C++ 操作员+;超载问题
为什么此代码会给出错误消息“IntelliSense:此运算符函数的参数太多” PerfectNum是一个常规类,thenum是一个int。C++ 操作员+;超载问题,c++,operator-overloading,C++,Operator Overloading,为什么此代码会给出错误消息“IntelliSense:此运算符函数的参数太多” PerfectNum是一个常规类,thenum是一个int。 此方法在类中。您将其定义为成员函数,对吗 在这种情况下,左手侧只是*这: // .h class PerfectNum { public: int operator+(PerfectNum other) const; }; // .cpp int PerfectNum::operator+(const PerfectNum &ot
此方法在类中。您将其定义为成员函数,对吗 在这种情况下,左手侧只是
*这:
// .h
class PerfectNum
{
public:
int operator+(PerfectNum other) const;
};
// .cpp
int PerfectNum::operator+(const PerfectNum &other) const
{
return this->thenum + other.thenum;
}
您需要将运算符设置为非成员函数。运算符+应为非成员函数。返回类型应为const object。如果定义了operator=defined,那么最好也定义operator+=defined。因此,您可以根据运算符+=,实现运算符+
const PerfectNum operator+(const PerfectNum& lhs, const PerfectNum& rhs)
{
PerfectNum ret(lhs);
ret += rhs;
return rhs;
}
重载运算符+在声明为类方法时当然不应该是友元/自由函数。下面是一个非常简单的实现:
class PerfectNum {
public:
PerfectNum(int);
PerfectNum(const PerfectNum&);
PerfectNum operator+(const PerfectNum&) const;
private:
int mNumber;
};
PerfectNum PerfectNum::operator+(const PerfectNum& rhs) const
{
return PerfectNum(this->mNumber + rhs.mNumber);
}
这不是一个类方法,是吗?如果您将其设置为PerfectNum方法,那么您只需要一个参数,并使用“this.thenum”作为另一个参数。这就是您从编译器获得的确切错误消息吗?函数int运算符+(PerfectNum,PerfectNum)
返回的参数太多?没有编译器会产生这样的错误消息。在这里发布编译器输出时请使用复制粘贴。有点错误。操作符应该是一个自由函数,可能是一个朋友。如果它是一个成员,它应该是const。参数应该是常量引用。语法错误-实现缺少返回类型。谁在投票支持这件事?哎呀。你说得对,这太可怕了。昨天我的工作压力很大,我需要摆脱它,但显然我把我的一些知识抛在了脑后:-)另外:我看不出有任何理由这不能成为一个成员函数。我可能缺少一些知识。如果是这样的话,请帮助我,而不是批评一切。我假设它应该是一个成员函数,因为它可以解释为什么参数太多(根据OP的错误消息)。它不应该是一个成员函数,这样就可以对左操作数和右操作数执行转换。C++中的运算符+几乎从来没有被实现为成员函数,因为这个。+ 1 SHIESH。所有的人都投票支持错误的答案,只有一人支持你的正确答案,我觉得有必要在这里投票。还有其他所有回答正确的人。我能对为什么它不应该是一个成员函数有一个好的、可靠的解释吗?有人告诉我,如果你想将它限制为左手边的PerfectNum
,这是可以的;由于OP只希望它位于两个PerfectNum
对象之间,因此我认为应该使用成员函数。
class PerfectNum {
public:
PerfectNum(int);
PerfectNum(const PerfectNum&);
PerfectNum operator+(const PerfectNum&) const;
private:
int mNumber;
};
PerfectNum PerfectNum::operator+(const PerfectNum& rhs) const
{
return PerfectNum(this->mNumber + rhs.mNumber);
}