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