2011-01-26 54 views

回答

11

類函數具有一個隱含的this參數,所以在類中聲明的雙參數運算符會隱含地想要獲取比實際可能更多的參數:a + b其中a是類C的一個實例,它是a.operator+(b)的糖,而不是C::operator+(a, b)。如果你只是想繼續經營的聲明與類的車身線條,你可以聲明爲friend功能:

class C { 
public: 
    friend C& operator+(const C& a, const C& b); 
}; 
2

鑑於像a @ b(其中@是一些二進制運算符)的表達,並且過載被使用的是成員函數,它的處理方式如下:[email protected](b)

換句話說,二元運算符的左側操作數始終是其成員函數被調用的對象。它唯一的其他操作數是右手操作數,所以這是唯一可以作爲(正常)參數傳遞的操作數。

C++只有一個三元運算符(?:),並且不能重載該運算符,因此不存在可以將運算符重載爲成員函數並使其(有意)可以接收多個參數的情況。

相關問題