首页 > 解决方案 > 有没有办法修改'operator->'以便'z->im'返回复数的虚部

问题描述

我有一个对复数建模的结构 Cmplx。

class Cmplx{
  double x;
  double y;
 public:
  Cmplx(int X, int Y){x = X; y = Y;}
  double& operator->(...){...}
}

我需要实现运算符,这样

int main(){
Cmlpx z(1,2);
z->im = 5;
z->re = 2;
}

将我的复数更改为 (2,5);我知道当 im 和 re 是字符串时该怎么做,但不知道该怎么做。

标签: c++c++11

解决方案


你可能会滥用operator->这种方式:

struct ComplexRef
{
    ComplexRef* operator->() { return this;}
    double& re;
    double& im;
};

class Cmplx{
  double x;
  double y;
public:
  Cmplx(int X, int Y){x = X; y = Y;}
  ComplexRef operator->(){ return {x, y}; }
};

演示

的重载operator ->必须要么返回一个原始指针,要么返回一个对象(按引用或按值),而该对象operator ->又被重载。


推荐阅读