2011-12-20 15 views
0

私の質問は、C++でのデータ型変換に関するものです。 C++では、組み込みデータ型(int、float)をユーザー定義のデータ型に暗黙的に変換できますか?組み込みデータ型からユーザー定義データ型への変換C++

次の例では、double型(t4 = t3 + 1.0)のテストオブジェクト型とその演算子を+演算子を使って追加しようとしているので、double型は暗黙的にテスト型オブジェクトに変換されますか?

class test { 
double d; 
int m; 
public: 
test() 
{ 
    d=0; 
    m=0; 
} 
test(double n) 
{ 
    d=n; 
} 
const test operator+(const test& t) 
{ 
    test temp; 
    temp.d = d+ t.d; 
    return temp; 
} 
}; 

int main() 
{ 
    test t1(1.2); 
    test t2(2.5); 
    test t3, t4; 
    t3= t1+ t2; 
    t4 = t3 + 1.0; 
    return 0; 
} 
+4

このコードは、[コンパイルされません](のhttp:// ideone。 com/gdhVO)、あなたのクラス 'test'はコンストラクタを持っていないので、' test t1(1.2) 'でそれを呼び出します。実際のコードを投稿してください。 –

答えて

0

doubleからtestへの暗黙的な変換を宣言test(double n)コンストラクタ。それがexplicitマークされていない限り、一般的には、正確に一つの引数で呼び出し可能である任意のコンストラクタは、(それが複数の引数を取るが、これらのデフォルト値を持つことができますコンストラクタを含みます)、暗黙の型変換として使用することができます。

struct Foo { 
    Foo(int x); // implicit conversion from int to Foo 
    explicit Foo(char c); // marked explicit - no implicit conversion 
    Foo(std::string a, double pi = 3.14159); // can be used as implicit 
              // conversion due to default 
              // argument 
}; 

編集:t4 = 1.0 + t3あなたはメンバー関数としてあなたoperator+オーバーロードしているため、動作しませんので、それが唯一の最初のオペランドがタイプtestのであれば考えられている - 暗黙的な変換は、この場合には試されていません。この作業を行うには、あなたのオペレータフリー機能します:あなたのコンストラクタtest(double)限り、

test operator+(const test& lhs, const test& rhs); 
+0

ok ..しかし、なぜt4 = 1.0 + t3がうまくいかないのですか?暗黙的に次のように変換してはいけません:t4 = test(1.0)+ t3; – Ruchi

+0

それを説明するために私の答えを編集しました。 –

+0

それを持って..ありがとう:) – Ruchi

0

はいは明示的ではありません

// implicite convertible 
test(double n) 
{ 
    d=n; 
} 

// not implicite convertible 
explicit test(double n) 
{ 
    d=n; 
} 
関連する問題