2016-04-02 6 views
0

Теперь я работаю с операторами на C++, но у меня есть одна проблема. Ну я пытаюсь Overloard операторов INT/поплавок, у меня есть 2 переменных в классеПерегрузка операторов C++ int/float (..)

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 двух из этих переменных?

+3

Что вы думаете 'return * this' делает? –

+0

Я возвращаю ссылку на объект, я думаю. – codesyntax

+3

Хорошо, но какой тип? И какой тип вы заявили о своей функции как возвращающейся? –

ответ

0

Я не совсем уверен, чего вы пытаетесь достичь. Я предполагаю, что один из двух следующих возможностей:

1) Covert два поплавка вашего класса (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 

Примечание: При преобразовании поплавок в целое все после десятичной точкой является (по крайней мере, это поведение, использующее g ++ под Ubuntu).

Если вы хотите, чтобы два поплава были частными или защищенными, вам нужно было бы создать методы, такие как int GetRe() и int GetIm().

2) Преобразуйте два поплавка вашего класса (re, im) в одно целое с помощью целочисленного оператора преобразования operator int const(). Этот оператор должен вернуть ровно один int. В следующем примере я решил вернуть абсолютное значение (величина) комплексного числа (так как ваши члены называются повторно, и им я предполагаю, что класс используется для комплексных чисел):

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 и так далее. Следовательно, вы получаете бесконечный цикл.

Смежные вопросы