C++の基礎:クラスのデフォルトコンストラクタを学ぶ
概要
C++のコンストラクタは関数であり、クラス内のメソッドですが、クラスのオブジェクトが作成されるときに自動的に呼び出される「特別なメソッド」です。プログラマがこの関数を呼び出す必要はありません。クラスの新しいオブジェクトが作成されるたびに、コンストラクタはクラスのメンバ変数を初期化したり、ストレージを割り当てたりすることができます。これが、この特別なメソッドにコンストラクタという名前が与えられている理由です。
class myclass
{
public:
myclass()
{
std::cout << "myclass is constructed!\n";
};
};
コントラクタには様々な種類があり、クラスのデフォルトコンストラクタもその一つです。このメソッドは、クラスだけでなく、構造体および共用体のデータ型でも使用されます。
デフォルトコンストラクタとして呼び出されるのは、以下のように定義しているケースです。
- クラスが引数なしで定義されている
- 空のパラメータリストで定義されている
- すべてのパラメータにデフォルトの引数が提供されている
なお、デフォルトコンストラクタが公開されている型は、Default Constructibleです。
クラスのデフォルトコンストラクタを宣言する方法を学びたいですか? デフォルトコンストラクタの定義では、class_nameに現在のクラスまたはクラステンプレートの現在のインスタンスの名前を指定する必要があります。
クラス内で定義するデフォルトコンストラクタ
以下は、クラス内でデフォルトコンストラクタを宣言する構文です。
構文:
class_name()
{
};
クラス内でデフォルトコンストラクタを宣言する場合は、以下のコード例のように記述することができます。
class myclass
{
public:
myclass()
{
};
};
以下は、クラス内で定義したデフォルトコンストラクタがどのように動作するか確認するための完全なコード例です。ここでは、新しいテスト・オブジェクトを作成し、自動的に x=100 を設定してコンストラクタメソッドを呼び出しています。
#include <iostream>
class myclass
{
public:
int x = 0;
myclass()
{
x = 100;
std::cout << "I am constructed\n";
};
};
int main()
{
class myclass test;
std::cout << test.x << '\n';
getchar();
return 0;
}
出力結果は、以下の通りです。
I am constructed
100
クラス外で定義するデフォルトコンストラクタ
以下は、クラス外でデフォルトコンストラクタを宣言する構文です。
構文:
class_name :: class_name()
{
// statement
}
クラス外でデフォルトコンストラクタを宣言する場合は、以下のコード例のように記述することができます。
class myclass // Class Definition
{
public:
myclass(); // Pre-Definition of the Default Constructor
};
myclass :: myclass() // Definition of the Default Constructor Outside of a Class Definition
{
}
上記のコード例の場合、myclassとmyclass()の間に::演算子を追加して宣言すると、クラス外でデフォルトコンストラクタを定義することができます。
クラス外で定義したデフォルトコンストラクタがどのように動作するか確認するための完全なコード例は以下の通りです。ここでは、新しいテスト・オブジェクトを作成し、自動的に x=100 を設定してコンストラクタメソッドを呼び出しています。
#include <iostream>
class myclass
{
public:
int x = 0;
myclass();
};
myclass :: myclass()
{
x = 100;
std::cout << "I am constructed\n";
};
int main()
{
class myclass test;
std::cout << test.x << '\n';
getchar();
return 0;
}