如何解决运算符+重载问题
| 为什么此代码给出错误消息“ IntelliSense:此操作符函数的参数过多”int operator+(PerfectNum a,PerfectNum b)
{
return (a.thenum+b.thenum);
}
PerfectNum是常规类,thenum是int。
此方法在此类中。
解决方法
您正在将其定义为成员函数,对吗?
在这种情况下,左侧仅是
*this
:
// .h
class PerfectNum
{
public:
int operator+(PerfectNum other) const;
};
// .cpp
int PerfectNum::operator+(const PerfectNum &other) const
{
return this->thenum + other.thenum;
}
, 您需要使操作员成为非成员函数。
, Operator +应该是非成员函数。返回类型应该是const对象。如果已定义operator =,那么最好也定义operator + =。因此,您可以根据operator + =来实现operator +。
const PerfectNum operator+(const PerfectNum& lhs,const PerfectNum& rhs)
{
PerfectNum ret(lhs);
ret += rhs;
return rhs;
}
, 当声明为类方法时,重载运算符+肯定不应该是friend / free函数。这是一个非常简单的实现:
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);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。