コードは次のとおりです。
#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
はパラメーター化されたコンストラクターを呼び出します。これを説明していただけますか。
パラメーター化されたコンストラクターは変換コンストラクターです。C ++は、物事を機能させるための妥当な変換シーケンスを見つけることができる限り、式を有効にすることは非常に喜ばしいことです。したがって、すでに述べたよう10
に、Integer
一時的なものに変換され、生成されたコンパイラによって割り当てられoperator= (Integer const&)
ます。
コンストラクターが予期しない変換で使用されないようにする場合は、としてマークを付けることができますexplicit
。
explicit Integer(int arg) { /* ... */}
その後、変換コンストラクターではなくなり、キャスト(またはユーザーが提供するカスタム代入演算子)がないと代入はできなくなります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加