程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了重载没有成员函数的一元减运算符大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决重载没有成员函数的一元减运算符?

开发过程中遇到重载没有成员函数的一元减运算符的问题如何解决?下面主要结合日常开发的经验,给出你关于重载没有成员函数的一元减运算符的解决方法建议,希望对你解决重载没有成员函数的一元减运算符有所启发或帮助;

考虑以下程序:

//Operator overloading of unary minus operator- with and without member function

#include <iostream>
using namespace std;
class test{
    int x;
    public:
    test(){

    }
    test(int h){
        this->x=h;
    }
    frIEnd voID operator- (test);
    voID showData(){
        cout << x << endl;
    }
};
voID operator- (test a){
     test *ptr=&a;
     ptr->x=-ptr->x;
}
int main(){
    test t1(7);
    operator-(t1);
    t1.showData();
    return 0;
}

在执行时,这会在在线编译器以及机器上的 Visual Studio Code 上打印 7 而不是 -7。有人可以解释一下出了什么问题吗?

解决方法

如果你想这样做,你需要 test& 而不是 test。你可能不应该;一元减号不应该改变它的参数,它应该返回一个修改过的参数。

,

您的运算符参数是一个值,而不是一个引用。因此,对其进行的任何更改,无论是直接更改还是通过本地指针(这是没有意义的),仍然只会更改最初传递内容的副本

一元减号是一个返回值的运算符。至少它应该制作参数的副本(您可以像现在一样隐式完全),否定它,然后返回否定值以供调用者获取。

换句话说:

#include <iostream>

class test
{
    int x;
public:
    test(int val = 0) : x(val)
    {
    }

    friend test operator- (test obj)
    {
        obj.x = -(obj.x);
        return obj;
    }

    friend std::ostream& operator <<(std::ostream& outp,test const& obj)
    {
        outp << "test:" << obj.x;
        return outp;
    }
};

int main()
{
    test t1(7);
    std::cout << t1 << '\n';
    std::cout << -t1 << '\n';
    return 0;
}

输出

test:7
test:-7

大佬总结

以上是大佬教程为你收集整理的重载没有成员函数的一元减运算符全部内容,希望文章能够帮你解决重载没有成员函数的一元减运算符所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: