【问题标题】:Overloading c++ operators int/float(..)重载 c++ 运算符 int/float(..)
【发布时间】:2016-07-22 04:47:27
【问题描述】:

我现在正在研究 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;
}

我能做些什么来获取其中两个变量的整数?

【问题讨论】:

  • 你认为return *this在做什么?
  • 我认为我正在返回对对象的引用。
  • 好的,但它是什么类型的?您将函数声明为返回的类型是什么?
  • @codesyntax z1 = (int)z1; 你想做什么? z1class Zespolona的对象,z1 = (int)z1;怎么写?
  • 我真的不知道我是否理解你,但我认为这种类型是一个对象,我正在返回它

标签: c++ int operators overloading


【解决方案1】:

我不完全确定您要达到的目标。我猜测以下两种可能性之一:

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

注意:当您将浮点数转换为整数时,小数点后的所有内容都会被省略(至少这是在 Ubuntu 下使用 g++ 的行为)。

如果您希望这两个浮点数是私有的或受保护的,您必须创建像 int GetRe()int GetIm() 这样的方法。

2) 使用整数转换运算符operator int const() 将类的两个浮点数(reim)转换为一个整数。该运算符必须准确返回一个int。对于以下示例,我决定返回复数的绝对值(大小)(因为您的成员被称为 re 并且我猜测该类用于复数):

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。

当您尝试将其转换为 int 时,您在问题中提到的代码会返回对您的类 Zespolona 的引用。因此,编译器再次尝试将该引用转换为int。但它得到的只是对Zespolona 的引用,等等。因此,你会得到一个无限循环。

【讨论】:

    猜你喜欢
    • 2015-02-23
    • 2010-11-14
    • 2015-08-18
    • 1970-01-01
    • 1970-01-01
    • 2016-02-19
    • 1970-01-01
    相关资源
    最近更新 更多