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

时间:2016-03-30 21:04:51

标签: c++ polymorphism

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

#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<<"\nx="<<x;
            cout<<"\ny="<<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;
}

3 个答案:

答案 0 :(得分:1)

这也将起作用:(使用参考)

#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<<"\nx="<<x;
            cout<<"\ny="<<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 :(得分: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;
    
    由于i按值获取其参数,因此

    不会更改mainoperator-的值。你需要使用:

    i = -i;
    

    查看调用该函数的效果。

答案 2 :(得分:0)

friend invert_position -(invert_position i)
{        
     i.x=-i.x;
     i.y=-i.y;
     i.z=-i.z;
     return i;
}

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