复数大小写中的C++运算符 ->

C++ operator -> in complex numbers case

本文关键字:gt 运算符 C++ 大小写      更新时间:2023-10-16

问题是实现类Cplx有两个双精度xy表示复数的实部和虚部。
其中一个子任务是实现具有以下描述的operator ->

(z­->rez­->im(:访问z的实部和虚部(你必须像z->re = 5一样实现改变(。

我有麻烦operator ->我从来没有真正了解它是如何工作的,所以我的问题是:->如何工作,何时使用它以及如何在这个问题中应用这个想法。

下面做你的要求...但不确定这是你想要的:

template <typename T>
struct ReIm
{
const ReIm* operator ->() const { return this; }
ReIm* operator ->() { return this; }
T re;
T im;
};

struct Cplx
{
double x;
double y;
ReIm<double> operator ->() const { return {x, y}; }
ReIm<double&> operator ->() { return {x, y}; }
};

演示

-> 运算符用于取消引用指向对象的指针,并在一个运算符中获取成员变量/函数。例如

Cplx* cplxPointer = new Cplx();
cplxPointer->x = 5;

Cplx* cplxPointer = new Cplx();
(*cplxPointer).x = 5;

它只是取消引用指针,然后获取成员变量(如果需要,也可以获取函数(。除非我误解了你的问题,否则以上应该能够帮助你完成作业。