Я не совсем уверен, чего вы пытаетесь достичь. Я предполагаю, что один из двух следующих возможностей:
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
и так далее. Следовательно, вы получаете бесконечный цикл.
Что вы думаете 'return * this' делает? –
Я возвращаю ссылку на объект, я думаю. – codesyntax
Хорошо, но какой тип? И какой тип вы заявили о своей функции как возвращающейся? –