クラスの定義とnewによるオブジェクトの生成,メンバ関数 |
使用ソースコードをダウンロードして参考にして下さい。
●コンストラクタ
ところで,初期化という行為もデータには欠かせない重要な基本的処理です。そこで,クラス型の定義の際に,型名と同じ名前の特別なメンバ関数を,初期化
専用の関数として定義できるようになっています。
このような関数をコンストラクタ(constructor)と呼びます(Fig. 2.10)。コンストラクタは,返却値を持たず,返却値の型も指定できない(voidとさえも指定できない)
ことを除けば,通常のメンバ関数と同様に定義できます。
コンストラクタは,クラス型インスタンス用のメモリが確保(=オブジェクトの生成)された時点,すなわち,変数宣言とnewの使用時に,Fig. 2.10-(1),(2)のように
呼び出すことができます。
例をList 2.8に示します。このように,クラス型ではコンストラクタによって,インスタンス生成と初期化を同時に行う方法を提供しているのです。変数のライフタイム
における初期化ステージの説明の際に残っていた,「動的なメモリ確保の際に初期化も同時に行うにはどうすればよいか」という課題を,クラス型はコンストラクタによって
解決しているというわけです。
なお,コンストラクタが定義されていないクラスには,デフォルトコンストラクタと呼ばれる,引数無しで何もしない公開コンストラクタが自動的に定義される。
つまり,
class T {
}
;
というクラス定義を行った場合,ソースコード上では見えないが,
class T {
public :
T() {}
}
;
というようにデフォルトコンストラクタが追加されていることになる。もちろん,クラスに一つでも明示的にコンストラクタが定義されたている場合は,デフォルト
コンストラクタは自動追加されることはない。
次に進む