2016-11-20 46 views
0

我總是覆蓋運營商這樣的首選方式:什麼是重寫的C運算符++

class MyClass { 
public: 
    ... 
    MyClass operator+(const MyClass&) const; 

private: 
    int some_number = 5; 
} 

MyClass MyClass::operator+(const MyClass& rhs) const 
{ 
    return MyClass(some_number + rhs.some_number); 
} 

但是今天我才明白,你可以用「朋友」關鍵字創建運營商太:

class MyClass { 
public: 
... 
friend MyClass operator+(const MyClass&, const MyClass&); 

private: 
    int some_number = 5; 
} 

MyClass operator+(const MyClass& lhs, const Myclass& rhs) 
{ 
    return MyClass(lhs.some_number + rhs.some_number); 
} 

考慮到我想要左側和右側操作員,我也(嘗試)遵循核心指導原則,哪種方法是首選方法?

+1

Fyi,這值得一讀:[運算符重載](https://stackoverflow.com/questions/4421706/operator-overloading)。特別是[會員與非會員之間的決定]部分(http://stackoverflow.com/questions/4421706/operator-overloading/4421729#4421729)。 – WhozCraig

+0

不要混淆**重載**和**覆蓋**。這些是非常不同的東西! –

回答

0

的首選方法是,甚至不能讓它的朋友:

MyClass operator+(MyClass lhs, Myclass const& rhs) 
{ 
    return lhs += rhs; 
} 

當然,這也依賴於operator+=但畢竟是更基本的操作。 +=改變其左側,應該是一個成員。