クラスのオブジェクトに整数値を割り当てるときに、パラメーター化されたコンストラクターが呼び出されるのはなぜですか?

クリシュナ・カンス・イェヌムラ

コードは次のとおりです。

#include<iostream>
using namespace std;

class Integer
{
    int num;

    public:
        Integer()
        {
            num = 0;
            cout<<"1";
        }
        
        Integer(int arg)
        {
            cout<<"2";
            num = arg;
        }
        int getValue()
        {
            cout<<"3";
            return num;
        }

};

int main()
{
    Integer i;
    i = 10;  // calls parameterized constructor why??
    cout<<i.getValue();
    return 0;

}

上記のコードでは、ステートメントi=10はパラメーター化されたコンストラクターを呼び出します。これを説明していただけますか。

StoryTeller-Unslander Monica

パラメーター化されたコンストラクターは変換コンストラクターです。C ++は、物事を機能させるための妥当な変換シーケンスを見つけることができる限り、式を有効にすることは非常に喜ばしいことです。したがって、すでに述べたよう10に、Integer一時的なものに変換され、生成されたコンパイラによって割り当てられoperator= (Integer const&)ます。

コンストラクターが予期しない変換で使用されないようにする場合は、としてマークを付けることができますexplicit

explicit Integer(int arg) { /* ... */}

その後、変換コンストラクターではなくなり、キャスト(またはユーザーが提供するカスタム代入演算子)がないと代入はできなくなります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ