繁体   English   中英

c ++使用const引用覆盖+ =

[英]c++ override += with const reference

对于一个项目,我正在尝试创建一个具有矢量功能的矢量类。 我试图通过覆盖+ =加法赋值来添加向量加法函数。 因为我不想+ =函数更改要添加的值,所以我希望将该值作为const reference传递。

我的代码:

Vector2D.h

#pragma once
class Vector2D
{
private:
    int m_x, m_y;
public:

    Vector2D(int x, int y);
    int getX();
    int getY();
    void setX(int x);
    void setY(int y);
    Vector2D& operator+=(const Vector2D&);
};

Vector2D.cpp

#include "Vector2D.h"
Vector2D::Vector2D(int x, int y)
{
    m_x = x;
    m_y = y;
}

int Vector2D::getX()
{
    return m_x;
}

int Vector2D::getY()
{
    return m_y;
}

void Vector2D::setX(int x)
{
    m_x = x;
}

void Vector2D::setY(int y)
{
    m_y = y;
}

Vector2D& Vector2D::operator+=(const Vector2D& toAdd)
{
    m_x += toAdd.getX();
    m_y += toAdd.getY();
    return *this;
}

但是我得到了错误:

该对象具有与成员函数“ Vector2D :: getX”不兼容的类型限定符

int Vector2D :: getX(void)':无法将'this'指针从'const Vector2D'转换为'Vector2D&'

我尝试链接将x和y返回到const

const int Vector2D::getX()
const int Vector2D::getY()

但这无法解决错误。 从参数中删除const可解决所有错误并导致工作代码。

我应该如何更改代码以确保传递给+ =运算符的值不能更改(例如,对传递的对象调用setY(100))?

也使Vector2D::getX() const 否则,您将无法在通过const引用拥有的对象上调用它。

您尝试添加const尝试已应用于函数的返回值,而不是this指针

const int Vector2D::getX()

是非const对象上的函数,该const返回const int

int Vector2D::getX() const 

const对象上的const

这就是为什么人们常说“领先的const会误导”的原因之一。

getX()getY()是非常量成员函数,不能用const对象调用。 由于它们不会修改Vector2D类的任何成员, Vector2D应将它们标记为const成员函数 ,例如

int Vector2D::getX() const 

注意const的位置,应该放在函数声明的末尾,这意味着该函数不会修改该类的任何成员(可变成员除外)。 const int Vector2D::getX()意味着函数将返回一个常量,与成员函数的特性无关。 实际上,从调用方的角度来看,返回常量的内置类型没有多大意义,它没有任何区别。

您正在寻找的是: 恒定成员函数

int Vector2D::getX() const 

函数声明中参数列表之后的 const表示该函数不会修改对象的状态。

可以为const和非const对象调用const成员函数 ,而只能为非const对象调用const成员函数

就您而言, toAdd是const。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM