对于一个项目,我正在尝试使用矢量函数创建一个矢量类。我试图通过覆盖+ =加法赋值来添加向量加法函数。因为我不希望+ =函数更改要添加的值我想将该值作为#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.h
#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.cpp
const
但是我得到了错误:
该对象具有与该成员不兼容的类型限定符 功能“Vector2D :: getX”
和
int Vector2D :: getX(void)':无法从'const转换'this'指针 Vector2D'到'Vector2D&'
我尝试将返回x和y的函数链接到const int Vector2D::getX()
const int Vector2D::getY()
:
const
但这不会解决错误。从参数中删除exit
可以解决所有错误并导致工作代码。
我应该如何更改代码以确保传递给+ =运算符的值不能更改(例如通过调用传递的对象上的setY(100))?
答案 0 :(得分:6)
也可以Vector2D::getX()
const
。否则,您无法通过const
引用在对象上调用它。
您添加const
的尝试已应用于函数返回值,而不是this
指针
const int Vector2D::getX()
非const
对象上的函数是否返回const int
。
int Vector2D::getX() const
是const
对象上的函数。
这就是人们经常说“领先的const
具有误导性”的原因之一。
答案 1 :(得分:4)
getX()
和getY()
是非const成员函数,不能使用const对象调用。由于他们不会修改班级Vector2D
的任何成员,因此您应将其标记为const member function,例如
int Vector2D::getX() const
注意const
的位置,它应放在函数声明的末尾,表示该函数不会修改该类的任何成员(可变成员除外)。 const int Vector2D::getX()
表示函数将返回一个常量,它与成员函数的特性无关。实际上,返回一个常量内置类型并没有多大意义,从调用者方面来看,它没有任何区别。
答案 2 :(得分:0)
您正在寻找的是:常数成员函数。
int Vector2D::getX() const
函数声明中的参数列表之后的const 表示该函数不会修改对象的状态。
可以为const和非const对象调用const成员函数,而非const成员函数只能为非const对象调用。
在您的情况下,toAdd
是常量。