我现在正在使用C ++中的运算符,但我有一个问题。好吧,我试图重写int / float运算符,我在类
中有2个变量class Zespolona{
public:
float re;
float im;
}
我完成了所有的操作员,但是当我做的时候
operator int const(){
this->re = (int)this->re;
this->im = (int)this->im;
return *this;
}
然后它会得到无限循环。
我的主要
int main(){
Zespolona z1;
z1.re = 1.2;
z1.im = 34.9;
z1 = (int)z1;
cout << z1 << endl;
}
我能做些什么来获得其中两个变量的int?
答案 0 :(得分:0)
我不完全确定你想要实现的目标。我猜测以下两种可能性之一:
1)将班级的两个浮点数(re
,im
)转换为整数:
这很简单。由于这两个成员是公开的,您可以直接访问它们:
#include <iostream>
int main()
{
Zespolona Z1;
Z1.re = 1.2;
Z1.im = 34.9;
std::cout << "Re: " << (int) Z1.re << std::endl;
std::cout << "Im: " << (int) Z1.im << std::endl;
return 0;
}
该程序的输出应为:
Re: 1
Im: 34
注意:将float转换为整数时,省略小数点后的所有内容(至少这是在Ubuntu下使用g ++的行为)。
如果您希望两个浮点数为私有或受保护,则必须创建int GetRe()
和int GetIm()
等方法。
2)使用整数转换运算符re
将类的两个浮点数(im
,operator int const()
)转换为一个整数。此运算符必须返回一个int
。对于下面的例子,我决定返回复数的绝对值(幅度)(因为你的成员被称为re和im我猜这个类用于复数):
class Zespolona
{
public:
float re;
float im;
operator int const()
{
return (int) sqrt(re*re + im*im);
}
};
int main()
{
Zespolona Z1;
Z1.re = 1.2;
Z1.im = 34.9;
std::cout << "Z1: " << (int) Z1 << std::endl;
return 0;
}
输出现在应该是:
Z1: 34
注意:再次将正确的(浮点)结果34.92 ...转换为整数34。
当您尝试将其转换为Zespolona
时,您在问题中提到的代码会返回对您的班级int
的引用。因此,编译器再次尝试将该引用转换为int
。但它得到的只是对Zespolona
的引用,依此类推。因此,你得到一个无限循环。