两个参数的运算符重载不起作用[关闭]

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++); 返回不同的结果吗? 你可以在这里了解++foofoo++之间的区别: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;

【讨论】:

以上是关于两个参数的运算符重载不起作用[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

重载运算与类型转换)

是否可以在 Swift 中重载 += 运算符?

为啥错误控制运算符@不起作用,仍会输出错误,我使用的PHP版本为8.2.0?

运算符重载

运算符重载

运算符重载