运算符重载多个参数和符号

时间:2014-11-13 12:40:33

标签: c++

我有一个班级:

class taphop
{
    public:
        taphop();
        ~taphop();   
        taphop(const list&);
        taphop& operator=(const taphop&);
        taphop operator+(const int&);
        taphop operator+(const taphop&);
};

main中,我无法使用多个参数:

main()
{
     taphop lmc=lmc+2+5+3+2; // Error;
     lmc=lmc+3+5+2; // Error;
     int a=a+1+2+4+5;   // Not error;
     a=a+1+2+4+5;   // Not error;
     return 0;
}

2 个答案:

答案 0 :(得分:0)

有一件事是肯定的。以下是未定义的。

taphop lmc = lmc + 2 + 5 + 3 + 2;

因为运算符+将在表达式中假定为完全构造的对象的尸体上调用

lmc+2+5+3+2

答案 1 :(得分:0)

除了使用lmc初始化lmc之外,您只需要阅读编译器提供给您的错误消息。以下是我对你可能要做的事情的看法:

class taphop
{
    int value;
public:
    taphop(const int x = 0) :value(x) {} // default value of 0
    ~taphop() {}
    int getvalue() const { return value; }
    taphop& operator=(const taphop &r) { value = r.value; return *this; }
    taphop operator+(const int x) { return taphop(value + x); }
    taphop operator+(const taphop &r) { return taphop(value + r.value); }
};

int main()
{
    taphop lmc = taphop(0) + 2 + 5 + 3 + 2;
    std::cout << lmc.getvalue() << std::endl; // prints 12
    lmc = lmc + 3 + 5 + 2;
    std::cout << lmc.getvalue() << std::endl; // prints 22
    return 0;
}