[英]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.