我是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;
}
我用过的注释代码使用后缀运算符递增两个数字。该代码存在一些问题,我得到的结果不正确。
答案 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;
}