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 に ?

ありがとうございました。

4

2 に答える 2

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

これにより、構造体のメンバーである参照逆参照Shapeオブジェクト(と呼ばれるオブジェクト)が返されます。ptr

そのオーバーロードは、構造体に対してこれ*operatorをオーバーロードしますPtrToShape

また、いいえ、それはで使用されていませんreturn *ptr < *rhs.ptr

于 2012-09-20T11:47:25.283 に答える
1

これは逆参照演算子であるため、PtrToShapeへのプレーンポインタを使用する場合と同じようにを逆参照できますShape

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

これはのインスタンスに適用されるShapePtrため、の比較には参加しませんoperator<。この式では、

return *ptr < *rhs.ptr;

*(rhs.ptr)RHSは、演算子の優先順位規則によるものと同等です。

これは通常、operator->過負荷を伴います。

于 2012-09-20T11:47:44.527 に答える