微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

运算符+重载问题

如何解决运算符+重载问题

| 为什么此代码给出错误消息“ 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 举报,一经查实,本站将立刻删除。