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