首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用友元函数的一元运算符重载

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

Stack Overflow用户
提问于 2016-03-31 05:04:51
回答 3查看 11K关注 0票数 0

我写了这段代码,试图使用友元函数对一元运算符执行重载。不知何故,这对我传递的初始值没有任何影响。

代码语言:javascript
复制
#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;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-03-31 05:22:15

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

  1. operator-函数需要返回一个invert_position对象。否则,

invert_position i(2,3);invert_position j= -i;

是个问题。可以将其视为类似于使用基础类型。

int i= 10;int j= -i;//我们期望j在此之后为-10。

因此,你需要的是

返回运算符-(invert_position i) { i.x=-i.x;i.y=-i.y;invert_position i;}

  • 该行

-i;

不会更改maini的值,因为operator-是按值获取参数的。您需要使用:

I= -i;

要查看调用函数的效果,请执行以下操作。

票数 1
EN

Stack Overflow用户

发布于 2018-09-14 13:37:21

这也是可行的:(使用引用)

代码语言:javascript
复制
#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
EN

Stack Overflow用户

发布于 2017-06-02 10:20:01

代码语言:javascript
复制
friend invert_position -(invert_position i)
{        
     i.x=-i.x;
     i.y=-i.y;
     i.z=-i.z;
     return i;
}

在main函数中,i=-i;应该在那里,因为friend函数是一个非成员函数,所以它需要返回值...谢谢

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36319717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档