重载c ++运算符int / float(..)

时间:2016-04-02 10:44:26

标签: c++ int operators overloading

我现在正在使用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?

1 个答案:

答案 0 :(得分:0)

我不完全确定你想要实现的目标。我猜测以下两种可能性之一:

1)将班级的两个浮点数(reim)转换为整数: 这很简单。由于这两个成员是公开的,您可以直接访问它们:

#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将类的两个浮点数(imoperator 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的引用,依此类推。因此,你得到一个无限循环。