两个参数的运算符重载不起作用[关闭]
Posted
技术标签:
【中文标题】两个参数的运算符重载不起作用[关闭]【英文标题】:operator overloading for two arguments not working [closed] 【发布时间】:2015-01-20 14:20:39 【问题描述】:我是 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;
我使用后缀运算符增加两个数字的注释代码。该代码存在一些问题,我得到的结果不正确。
【问题讨论】:
请定义“不正确的结果”。在询问程序行为/输出时,请务必同时发布预期和实际输出/行为。 en.cppreference.com/w/cpp/language/operators 和 ***.com/questions/4421706/operator-overloading 您希望return a++;
和return (a++);
返回不同的结果吗?
你可以在这里了解++foo
和foo++
之间的区别:parashift.com/c++-faq/increment-pre-post-overloading.html
供将来参考:“我请求人们解决我的问题并清除我的疑问”不是寻求帮助的正确形式。请务必礼貌地询问答案,您将有更多机会获得好的解决方案。
【参考方案1】:
在这两种情况下,您都将返回对象的副本之后递增它(或之前,在开始时未注释的代码中)。如果对象 before 增加它,则后缀运算符应该返回一个副本。您可以根据前缀运算符来实现这一点:
num copy = *this;
++(*this);
return copy;
【讨论】:
【参考方案2】:先复制,再发送。
#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;
【讨论】:
以上是关于两个参数的运算符重载不起作用[关闭]的主要内容,如果未能解决你的问题,请参考以下文章