簡體   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