2017-12-25 35 views
-1

オブジェクトをdouble値に変換したいと思います。 それは次のようになります - > ClassA clsA(1,2,3);C++ operator =オブジェクトからdoubleへキャスト

double result = clsA; 

私は私のヘッダファイルにそのようなSTHを書いた:

const double operator= (const ClassA&); 

とのcppファイルに実装:

const double ClassA::operator= (const ClassA& a) { 
    /* here I made some math calculation on instance 'a' and the result is double value *\ 
    return doubleValue; 
} 

しかし、それはしませんもしそれを作るのが良いのかどうかわかりません、演算子を使って別の例にオブジェクトを割り当てることもできます - > objA = objB、それでtogを議論できるかどうかわかりません上記の実装を持つether。

ありがとうございました!

+0

'にClassA ::演算子=(定数クラスを使用します'&A 'は(クラス参照)' ClassA'を 'ClassA'に代入するために使用され、戻り値の型は' ClassA'でなければなりません。 'ClassA a、b; a = b; '。あなたが望むのは、変換演算子が倍精度であるため、 'ClassA'の中に' operator double()const; 'のようなものです。例えば、 http://en.cppreference.com/w/cpp/language/cast_operator – Holt

+0

@Holtここにコメントを書くことができますか?私はそれを始める方法を知らない? – lory

+0

@Holtと、これを '='の後にあるオブジェクトと 'double value = objAに代入する値を取ることを'指示する方法。 ? – lory

答えて

1

あなたは、変換(またはキャスト)オペレータ書きたい:あなたが作る、倍増する偶発暗黙のキャストのリスクを減らすために(doubleに明示的なキャストを作るために、発信者を強制する場合

// integer division/multiplication 
// computes (num_*fac_)/div_ 
struct A 
{ 
    int num_, fac_, div_; 
    A (int num, int fac, int div) : num_(num), fac_(fac), div_(div) {}; 

    // convert to double 
    operator double() const { return double(num_ * fac_)/double(div_); } 
}; 

int main() 
{ 
    A a(1, 2, 3); 
    volatile double f = a; 
    return f; 
} 

をオペレータ明示。

explicit operator double() const { return double(num_ * fac_)/double(div_); 

キャストを強制するために、static_castを

double f = static_cast<double>(a); 
+0

なぜ、2つのオブジェクトが割り当てられている - > objA = objBの場合、エラーが発生します:過負荷の演算子 '*'の使用はあいまいです(オペランドの種類 'ClassA'と 'int') obj3 = obj1 * 2; 組み込み候補演算子*(double、int) – lory

+0

'objA = objB'は浮動小数点数とは関係ありません。何も定義しないで、手作業で管理されたリソースがない限り、コンパイラが提供するデフォルトのコピーコンストラクタと演算子を使用します。 –

+0

オペレータに明示的に追加した場合、私にエラーが表示されます:明示的な会話関数はC++ 11の拡張です – lory

関連する問題