重载运算符*

overloading operator*

本文关键字:运算符 重载      更新时间:2023-10-16

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

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

谢谢。

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

这将返回一个Shape对象取消引用的引用,称为 ptr ,它是结构的成员。

该重载将使PtrToShape结构的此*operator过载。

另外,不,它不用于return *ptr < *rhs.ptr

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

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

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

return *ptr < *rhs.ptr;

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

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