第8章 コンストラクタとデストラクタ


前章では、最も単純なクラスの作り方を やりました。実は、前回のクラス定義には大事なものが抜けています。 それは何かというと、今回やるコンストラクタ(constructor,構築子)と デストラクタ(destructor,消滅子)です。話は変わりますが、

構造体はstaticであれば宣言時に初期化することができます。

ところがクラスはこのような意味での初期化はできません。 そのかわりに、コンストラクタとかデストラクタという関数を 定義することができます。

[作り方手順] 1.コンストラクタは、クラスの名前と同じ名前である。 2.コンストラクタは、引数を取ることができる。 3.コンストラクタは、戻り値がない(注:void型ではない) 4.デストラクタは、クラスの名前の前にチルダを付ける。 5.デストラクタは、引数がない。戻り値もない 6.コンストラクタもデストラクタも省略されると暗黙のうちに   引数や、中身のない関数が定義されている。 7.コンストラクタもデストラクタもpublicな関数である。

ということです。それと、前章では触れませんでしたが Simpleというクラスを定義したとします。 その後

Simple MyClass;

とした場合、MyClassをオブジェクトと言うことがあります。

では例題を考えてみましょう。 まず、猫クラスというものを定義することにします。 猫は、普通足が4本あります。毛は種類によって長いものと 短いものがあります。体型は大型と小型があります。

strcpy関数を使っているのでstring.hをインクルードします。

Catクラスの定義をします。
コンストラクタの名前はクラス名と同じCatです。
デストラクタの名前はクラス名にチルダを付けて~Catです。
コンストラクタもデストラクタもpublicです。
デストラクタに引数はありません。
猫の足は4本と決まっているのでlegはprivateにしました。

コンストラクタとデストラクタの関数定義です。 関数の戻り値はありません。従ってreturnは 記述してはいけません

コンストラクタとデストラクタがいつどこで呼ばれるのかを はっきりさせるために呼ばれるとその旨表示するようにして みました。

メンバ関数の定義です。戻り値はvoid型なので returnを記述しています。(void型の時はreturnを 記述しなくても間違いではありません。)

main関数でMaineCoonオブジェクトを宣言すると同時に 初期化しています。American_Shortオブジェクトについても 同様です。

コンストラクタとデストラクタがどこで呼ばれているか 注意してください。

メイン・クーンというのは、 このホーム・ページの表紙となっている猫の種類です。


[C++Index] [総合Index] [Previous Chapter] [Next Chapter]

Update Jan/07/1997 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。