首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Overriding = C++中的运算符

Overriding = C++中的运算符
EN

Stack Overflow用户
提问于 2010-10-20 05:46:09
回答 8查看 16.4K关注 0票数 3

我正在尝试覆盖=运算符,以便可以将我的Point类更改为Vector3类。

代码语言:javascript
复制
Point tp = p2 - p1;
Vec3 v;
v = tp;

我面临的问题是,"v“的x,y,z成员总是等于零。

Vec3.h:

代码语言:javascript
复制
Vec3 operator =(Point a) const;

Vec3.cpp:

代码语言:javascript
复制
Vec3 Vec3::operator =(Point a) const
    {
        return Vec3(a.x,a.y,a.z);
    }

再次感谢您的帮助:)

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2010-10-20 05:50:23

已经有一段时间了,但我觉得你想

代码语言:javascript
复制
Vec3& Vec3::operator=(const Point &a) 
{
    x = a.x; y = a.y; z = a.z;

    return *this;  // Return a reference to myself.
}

赋值修改了'this',所以它不能是const。它不会返回新的Vec3,它会修改现有的one。您可能还需要一个来自Point的复制构造函数,它的作用与此相同。

票数 10
EN

Stack Overflow用户

发布于 2010-10-20 05:49:19

你想要这个:

代码语言:javascript
复制
Vec3 & Vec3::operator =(const Point &a) 
{
x = a.x;
y = a.y;
z = a.z;
return *this;
}

此对象赋值应修改此对象,而不是返回对刚修改的对象的引用

票数 2
EN

Stack Overflow用户

发布于 2010-10-20 05:49:19

赋值操作符的工作方式是这样的。

Vec3.h:

代码语言:javascript
复制
Vec3& operator = (const Point &a);

Vec3.cpp:

代码语言:javascript
复制
Vec3& Vec3::operator = (const Point &a)
{
    x = a.x;
    y = a.y;
    z = a.z;
    return *this;
}

注意,您正在修改this对象并返回对它的非常数引用。

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

https://stackoverflow.com/questions/3973057

复制
相关文章

相似问题

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