2012-09-20 152 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->过载。