2012-11-16 21 views
5

當一個類重載operator+時,它是否應該被聲明爲const,因爲它不會對該對象進行任何賦值? 此外,我知道operator=operator+=返回一個參考,因爲進行了分配。但是,operator+呢?當我實現它時,我應該複製當前對象,將給定的對象添加到該對象,並返回該值?C++ - 我應該使`運算符+`常量?它是否會返回一個參考?

以下是我有:

class Point 
{ 
public: 
    int x, int y; 

    Point& operator += (const Point& other) { 
     X += other.x; 
     Y += other.y; 
     return *this; 
    } 

    // The above seems pretty straightforward to me, but what about this?: 
    Point operator + (const Point& other) const { // Should this be const? 
     Point copy; 
     copy.x = x + other.x; 
     copy.y = y + other.y; 
     return copy; 
    } 
}; 

這是一個正確實施operator+的?或者是否有我忽視的可能會導致麻煩或不必要的/未定義的行爲?

+1

運算符重載的很多細節可以在這裏找到:http://stackoverflow.com/questions/4421706/operator-overloading – chris

回答

6
比那還好

,你應該讓一個免費的功能:

Point operator+(Point lhs, const Point& rhs) { // lhs is a copy 
    lhs += rhs; 
    return lhs; 
} 

但是,是的,如果你把它作爲一個成員函數應該是const,因爲它不會修改左側對象。

關於是否返回參考文獻或副本,操作員超載的建議是做爲基本類型做(即做爲int做)。在這種情況下,添加兩個整數將返回一個單獨的整數,該整數不是對任何一個輸入的引用。

+0

啊,我明白了。謝謝。另外,將它作爲一項免費功能有什麼好處? –

+1

@BrandonMiller:對稱類型。如果您的類型具有隱式轉換構造函數(即可以隱式轉換某種其他類型),則自由函數實現將允許在兩個參數上進行轉換,而成員函數只能在右側進行轉換。 –

+0

那裏有一些很好的信息!我從來沒有想到這一點。 –

相關問題