0

在下面的代码中,我想知道 operator* 重载在这里做了什么。

// 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

它是一个取消引用运算符,因此您可以取消引用 a PtrToShape,就像使用指向 的普通指针一样Shape

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

它适用于 的实例ShapePtr,因此它不参与 中的比较operator<,因为在此表达式中,

return *ptr < *rhs.ptr;

*(rhs.ptr)由于运算符优先规则,RHS 等价于。

这通常伴随着operator->过载。

于 2012-09-20T11:47:44.527 回答