2012-09-20 149 views
0

在下面的代碼中,我想知道operator * overloadind在這裏執行的操作。重載運算符*

// struct pointer to Shape 
struct PtrToShape 
{ 
Shape *ptr; 

bool operator < (const PTRToShape & rhs) const 
{ return *ptr < *rhs.ptr; } 

const Shape & operator*() const 
{ return *ptr; } 

}; 

它會超載嗎?它是否會重載結構或形狀對象的*運算符?這是超載使用:

return *ptr < *rhs.ptr 

而在我前面提到的*(重載或不)是指什麼? rhs還是rhs.ptr?

謝謝。

回答

2
const Shape & operator*() const 
{ return *ptr; } 

這將返回一個參考解除引用Shape目的,一個稱爲ptr,這是您的結構的成員。

該超負荷將使您的PtrToShape結構的此*operator過載。

而且,不,它不是在return *ptr < *rhs.ptr

+0

因此,如果我得到它的權利* rhs會返回相同的* rhs.ptr現在運算符重載爲該結構的權利? – Mppl

+0

@ user611295是的,這是正確的。但我不確定這是否是一個好主意。 –

1

使用,這是一個去參考操作,這樣就可以去參考PtrToShape,你會用一個普通的指針做Shape

PtrToShape p = ....; 
(*p).methodOfShapeClass(); 

它適用於的ShapePtr實例中,所以它不參加比較在operator<,因爲在這個表達式中,

return *ptr < *rhs.ptr; 

的RHS相當於*(rhs.ptr)由於操作者優先級規則。

這通常伴隨着一個operator->過載。