一元 - 使用友元函数重载运算符
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;
}
答案
我在您发布的代码中看到了几个问题。
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; }
- 这条线
-i;
不会改变i
中main
的值,因为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;应该在那里因为友元函数是非成员函数所以它需要返回值...谢谢
以上是关于一元 - 使用友元函数重载运算符的主要内容,如果未能解决你的问题,请参考以下文章
什么运算符一定要重载友元函数,什么时候一定要重载为成员函数?