C++ 有没有办法修改';操作员->';因此';z->;im';返回复数的虚部

C++ 有没有办法修改';操作员->';因此';z->;im';返回复数的虚部,c++,c++11,C++,C++11,我有一个结构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都是字符串时,我知道怎么做,但不知道怎么

我有一个结构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都是字符串时,我知道怎么做,但不知道怎么做。

这样你可能会滥用
操作符->

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->
依次重载该对象。

您可能会这样滥用
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->
反过来又重载了该对象。

如果要这样提供对成员的访问,为什么不公开成员?1)将“x”和“y”重命名为
im
re
。2) 公开。3) 利润!请不要<代码>->仅适用于指针类型。一些语言(比如java)不允许操作员重载。如果你不想让这些成员公开,考虑不同的重载函数,除了<代码> > >代码>,比如<代码> IMAGIONARY(/>代码>和<代码> Realver()/Cyto>。我可以使X和Y公共,并将它们重命名为RE和IM,但它不起作用,因为在本例中z不是指针。此外,这是一个考试练习,所以我不能按照我想要的方式来实施。如果你想这样提供对成员的访问,为什么不公开成员?1)将“x”和“y”重命名为
im
re
。2) 公开。3) 利润!请不要<代码>->仅适用于指针类型。一些语言(比如java)不允许操作员重载。如果你不想让这些成员公开,考虑不同的重载函数,除了<代码> > >代码>,比如<代码> IMAGIONARY(/>代码>和<代码> Realver()/Cyto>。我可以使X和Y公共,并将它们重命名为RE和IM,但它不起作用,因为在本例中z不是指针。另外,这是一个考试练习,所以我不能按照我想要的方式执行。如果我可以问一下,为什么会调用“ComplexRef*操作符->”?z->根据我的理解是一个复杂的外部参照对象,然后我们看看它的“im”组件,我是不是搞错了?还有,为什么圆点不在’(z->)中呢necessary@Nasal:
c->m
调用
operator->
,直到结果类型为指针。您可以使用点来执行
z.operator->().im
,但是
z->im
相当于
z.operator->().operator->()->im
。如果我可以问,为什么会调用“ComplexRef*operator->”?z->根据我的理解是一个复杂的外部参照对象,然后我们看看它的“im”组件,我是不是搞错了?还有,为什么圆点不在’(z->)中呢necessary@Nasal:
c->m
调用
operator->
,直到结果类型为指针。您可以使用点来执行
z.operator->().im
,但是
z->im
相当于
z.operator->().operator->()->->im