2017-04-07 6 views
-6
class a { 
    a(int b); 
} 
main(){ 
    int b=5; 
    a tempa=b; 
} 

これはどのように機能しますか?オブジェクト初期化時に代入演算子によってコンストラクタにパラメータが渡される理由は?

HWでこの問題が発生しましたか?

誰かが助けることができますか?ありがとう。

+1

コンパイルして実行した実際のコードを投稿してください。 – molbdnilo

+0

Woah ... '(){}のフォント。 ? 'はコードの残りの部分と一致しません。どうしたの? (それはあなたがすべきではありません、ちょうど奇妙に見えます) – Borgleader

+1

@Borgleaderこれらは全角文字です。とにかくモノスペースフォントではあまり役に立ちません:) – Quentin

答えて

3

あなたの質問に示すようなコンストラクタが変換コンストラクタと呼ばれることがあります。

これは、コンパイラが引数型の値を取得し、それをクラスのインスタンスに変換することを許可します。あなたの例で

、ライン

a = b; 

a = a(5); 

(まあ、クラス及びaという名前の変数の両方を有するの衝突を除く)

に等しいです。

これを許可しない場合は、コンストラクタをに明示する必要があります。

class A 
{ 
public: 
    explicit A(int); 
}; 

コンパイラは、コンバージョンのコンストラクタを上記のように使用することはできません。あなたは明示的にコンストラクタを使用する必要があります。

+0

ありがとう、プログラマーの方が多いです。 – ricecakebear

関連する問題