一元 - 使用友元函数重载运算符

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一元 - 使用友元函数重载运算符相关的知识,希望对你有一定的参考价值。

我编写了这段代码,试图在一元运算符上执行重载 - 使用友元函数。不知何故,对我所通过的初始价值没有影响。

#include<iostream>
//fifty6s
using namespace std;
class invert_position
{
    int x,y;
    public:
        invert_position(int a,int b)
        {
        x=a;
        y=b;
        }
    void show()
        {
            cout<<"
x="<<x;
            cout<<"
y="<<y;
        }
    friend void operator -(invert_position);
};
void operator -(invert_position i)
{
    i.x=-i.x;
    i.y=-i.y;
}
int main()
{
    invert_position i(2,3);
    -i;
    i.show();
    return 0;
}
答案

我在您发布的代码中看到了几个问题。

  1. operator-函数需要返回一个invert_position对象。除此以外, invert_position i(2,3); invert_position j = -i; 是个问题。可以想象它与使用基本类型相似。 int i = 10; int j = -i; // We expect j to be -10 after this. 因此,你需要的是什么 invert_position operator -(invert_position i) { i.x=-i.x; i.y=-i.y; return i; }
  2. 这条线 -i; 不会改变imain的值,因为operator-通过值得到它的论证。你需要使用: i = -i; 看到调用函数的效果。
另一答案

这也可以:(使用参考)

#include<iostream>
//fifty6s
using namespace std;
class invert_position
{
    int x,y;
    public:
        invert_position(int a,int b)
        {
            x=a;
            y=b;
        }
    void show()
        {
            cout<<"
x="<<x;
            cout<<"
y="<<y;
        }
    friend void operator -(invert_position &);
};
void operator -(invert_position &i)
{
    i.x=-i.x;
    i.y=-i.y;
}
int main()
{
    invert_position i(2,3);
    -i;
    i.show();
    return 0;
}
另一答案
friend invert_position -(invert_position i)
{        
     i.x=-i.x;
     i.y=-i.y;
     i.z=-i.z;
     return i;
}

并且在主函数i = -i;应该在那里因为友元函数是非成员函数所以它需要返回值...谢谢

以上是关于一元 - 使用友元函数重载运算符的主要内容,如果未能解决你的问题,请参考以下文章

运算符重载

什么运算符一定要重载友元函数,什么时候一定要重载为成员函数?

运算符重载

运算符重载和友元函数

C++入门不能重载为友元函数的4个运算符(=, ->, [ ], ( ))

运算符重载 学习总结