あなたが達成しようとしていることは完全にはわかりません。整数に(re
、im
)あなたのクラスの2つのfloatをコバート)
1: これはかなり単純である私は、次の2つの可能性のうちの1つを推測しています。 2人のメンバーは、公開されているので、あなたはそれらを直接アクセスすることができます。
#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 ++を使用した動作です)。
2つのフロートをプライベートにするか保護する場合は、int GetRe()
とint GetIm()
のようなメソッドを作成する必要があります。
2)整数変換演算子operator int const()
を使用して、クラスの2つの浮動小数点数(re
、im
)を1つの整数に変換します。この演算子は、ちょうどint
の1つを返す必要があります。
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
に変換しようとします。しかし、それは再びZespolona
への参照です。したがって、無限ループが発生します。
あなたは 'return * this'が何をしていると思いますか? –
オブジェクトへの参照を返しています。 – codesyntax
いいですが、どのようなタイプですか?あなたの機能を返すと宣言したタイプは? –