运算符重载两个参数不起作用

时间:2015-01-20 14:20:39

标签: c++ visual-c++ g++

我是C ++的新手,目前正在学习运算符重载后缀运算符,在下面的程序中,如果我使用一个参数,我得到的结果很好,但如果我使用两个参数,程序显示不正确的输出。我请求人们解决我的问题并清除我的怀疑。

#include<iostream>
using namespace std;
class num
{
int a;
public:
num(int _a = 0)
{
    a = _a;
}
num operator ++ ()
{
    return a++;
}
num operator ++ (int)
{
    return (a++);
}

void show()
{
    cout << a << endl;
}
};

/*
class num
{
int a, b;
public:
num(int _a = 0, int _b = 0)
{
    a = _a;
    b = _b;
}

num operator ++ ()
{
    a++;
    b++;
    return *this;
}

num operator ++ (int)
{
    a++;
    b++;
    return *this;
}

void show()
{
    cout << a << b << endl;
}
};

*/
int main()
{
num ob(10);
num z,y;
ob.show();
z = ob++;
z.show();

y = ++ob;
y.show();
getchar();
return 0;
}

我用过的注释代码使用后缀运算符递增两个数字。该代码存在一些问题,我得到的结果不正确。

2 个答案:

答案 0 :(得分:2)

在这两种情况下,您在递增后(或之前,在开始时未注释的代码中)返回对象的副本。如果对象递增之前,后缀运算符应该返回一个副本。您可以根据前缀运算符实现此目的:

num copy = *this;
++(*this);
return copy;

答案 1 :(得分:0)

先复制,然后发送副本。

 #include<iostream>
 using namespace std;
 class num
 {
    int a;
    public:
    num(int _a = 0)
    {
        a = _a;
    }
    num operator++ ()
    {
        num t=(*this);
        (this->a)++;
        return t;
    }
    num operator++ (int)
    {
        a++;
        return (*this);
    }

    void show()
    {
        cout << a << endl;
    }
};


int main()
{
    num ob(10);
    num z,y;
    ob.show();
    z = ob++;
    z.show();

    y = ++ob;
    y.show();
    getchar();
    return 0;
}