2011-04-02 1 views
3

それは原始的な二重に割り当て私のプリミティブに割り当てることができるクラスを作成するにはどうすればよいですか?スカラークラスを作るにはどうすればいいですか?

class Time 
{ 
    public: 
     Time(); 

     explicit 
     Time(
      const double& d); 

     Time& 
     operator=(
      const Time& time); 

     Time& 
     operator=(
      const double& d); 
}; 

を作ることが可能だ場合、私は不思議でしたか?

私はTimeをIVとして多く使用しており、多くのスカラー演算を行う必要があるため、通常は通常の倍精度のDVと「混合」する必要があります。 2番目の代入演算子を追加すると、別の方法でそのトリックが実行されました。

多くの操作はこれでもできません。私はTimeクラス以外の演算子を作成して、TimeとDoubleの間の加算、減算、乗算、および除算を可能にしています。

Error 1 error C2440: 'initializing' : cannot convert from 'double' to 'Time' linearfit.cpp 67 

は、誰もがこれでの経験を持っている:代入演算子はクラスの外に許可されていませんので、しかし、私はこの最後のエラーを克服することができないんですか?

ありがとうございます!

+0

あなたにエラーを与える何のコード? – interjay

+2

あなたの問題は 'Time t = 912.0;のような行にあると思います。コンストラクタ' Time(const double&) 'から' explicit'を削除して、 'double'から' Time '。 –

+0

ああ、申し訳ありませんが私は明確でない場合。時間t = 912.0は完璧に機能します。もう一つの方法は、私が探していたものでした。どうも! – Rene

答えて

4

オペレータの書き込み/オーバーライドが必要です。この場合、キャスト演算子です。 はあなたがdoubleからTimeを転換させるためにoperator double() constを宣言する必要があります方法

operator double() { return double_however_computed_from_your_time; }; 
+0

thx!まさに私が探しているもの。 – Rene

2

を定義します。 プリミティブ型の代入演算子をオーバーロードする方法はありません。

+0

はい!ありがとうございました!私はこれが可能であることを知らなかった。これはまさに私が探していたものでした。これはプリミティブのためだけに機能しますか?またはクラスのためにも?とにかくね! – Rene

3

Time(const double &d)explicitと記載されていることが原因で発生した可能性があります。明示的で暗黙的な変換を削除して、doubleからTimeにする必要があります(但し、そうしないと時折起こることもあります)。私はおそらくconst参照ではなく値でダブルを渡すだろう。倍増する時間からの変換

を用いて達成することになります。

class Time { 
// ... 
    operator double() const; 
}; 
関連する問題