2016-04-02 14 views
0

私は現在C++の演算子で作業していますが、問題が1つあります。まあ、私はoverloard int型/フロート演算子にしようとしている、私は私が私のオペレータのすべてをやったC++演算子のオーバーロードint/float(..)

class Zespolona{ 
public: 
    float re; 
    float im; 
} 

クラスの2つの変数を持っていますが、私は

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; 
} 

何私は、これら2つの変数のint型を取得するために、行うことができますか?

+3

あなたは 'return * this'が何をしていると思いますか? –

+0

オブジェクトへの参照を返しています。 – codesyntax

+3

いいですが、どのようなタイプですか?あなたの機能を返すと宣言したタイプは? –

答えて

0

あなたが達成しようとしていることは完全にはわかりません。整数に(reim)あなたのクラスの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つの浮動小数点数(reim)を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への参照です。したがって、無限ループが発生します。

関連する問題