>> C++入門トップに戻る
今回はコンストラクタとデストラクタについて説明します。
まずコンストラクタについてです。
コンストラクタとは、クラスを動的確保(インスタンスを生成)した時に、
実行される関数のことです。
通常の関数と違うことと言えば、戻り値を返せないことです。
それと、関数名がクラス名と同じになることです
下記のコードをみてください。
これを実行すると、50、と表示されます。
TEST関数があると思いますが、これがコンストラクタです。
コンストラクタは絶対にクラス名と同じにしなければなりません。
それと、戻り値が返せないので戻り値の場所には何も書いてないですよね?
それ以外は普通の関数です。
ではコンストラクタはどうやって実行されるのかというと、newで動的確保されたときです。
もし、引数を設定していた場合は、上記のようにTEST(50)と書きます。
これでコンストラクタに50という値を渡しているという意味になります。
上記のコードではコンストラクタの処理で、渡された引数をクラス内のfigure変数に代入しています。
その後、main関数内のprintf関数でその変数にアクセスして表示しています。
ちゃんと50と表示されているので、コンストラクタが動作してることがわかると思います。
次に、デストラクタについてですが、
コンストラクタがnewで動的確保した時に実行されていたのに対し、逆にデストラクタは、
メモリが解放されたタイミングで実行されます。
下記のコードを見てください。
これを実行すると、50、と、「デストラクタ実行」と表示されます。
デストラクタの書き方は、
クラス名の前にチルダ(~)をつけるだけです。
コンストラクタと同じように戻り値は返せませんし、チルダの後ろはクラス名と同じにしなければなりません。
デストラクタの実行タイミングは、メモリが解放されたときです。
つまり、delete関数が実行されたときです。
コンストラクタはクラス内の変数の値の初期化などで、用途が結構ありそうな気はしますが、
デストラクタは使うことあるかなぁ?と考えている人も多いと思います。
私も最初は使いませんでしたが、大規模なプログラムを組むようになってくると、
クラス内でメモリの動的確保をしたりします。
その時の解放処理をするために、デストラクタをよく利用するようになりました。
別にこの関数は絶対使わなければいけないわけじゃありません。
ですが、覚えておくと便利なのでしっかり覚えておきましょう。
次回はクラスの継承について説明します。
>> 【クラスの継承】に進む
>> C++入門トップに戻る
コンストラクタとデストラクタ
まずコンストラクタについてです。
コンストラクタとは、クラスを動的確保(インスタンスを生成)した時に、
実行される関数のことです。
通常の関数と違うことと言えば、戻り値を返せないことです。
それと、関数名がクラス名と同じになることです
下記のコードをみてください。
#include <stdio.h> class TEST{ public: int figure; TEST(int temp){ figure=temp; } }; int main(void) { //クラスTESTのポインタを宣言 TEST *test; //newを使って動的確保 test=new TEST(50); printf("%d\n",test->figure); delete test; return 0; }
これを実行すると、50、と表示されます。
TEST関数があると思いますが、これがコンストラクタです。
コンストラクタは絶対にクラス名と同じにしなければなりません。
それと、戻り値が返せないので戻り値の場所には何も書いてないですよね?
それ以外は普通の関数です。
ではコンストラクタはどうやって実行されるのかというと、newで動的確保されたときです。
もし、引数を設定していた場合は、上記のようにTEST(50)と書きます。
これでコンストラクタに50という値を渡しているという意味になります。
上記のコードではコンストラクタの処理で、渡された引数をクラス内のfigure変数に代入しています。
その後、main関数内のprintf関数でその変数にアクセスして表示しています。
ちゃんと50と表示されているので、コンストラクタが動作してることがわかると思います。
次に、デストラクタについてですが、
コンストラクタがnewで動的確保した時に実行されていたのに対し、逆にデストラクタは、
メモリが解放されたタイミングで実行されます。
下記のコードを見てください。
#include <stdio.h> class TEST{ public: int figure; TEST(int temp){ figure=temp; } ~TEST(){ printf("デストラクタ実行\n"); } }; int main(void) { //クラスTESTのポインタを宣言 TEST *test; //newを使って動的確保 test=new TEST(50); printf("%d\n",test->figure); delete test; return 0; }
これを実行すると、50、と、「デストラクタ実行」と表示されます。
デストラクタの書き方は、
クラス名の前にチルダ(~)をつけるだけです。
コンストラクタと同じように戻り値は返せませんし、チルダの後ろはクラス名と同じにしなければなりません。
デストラクタの実行タイミングは、メモリが解放されたときです。
つまり、delete関数が実行されたときです。
コンストラクタはクラス内の変数の値の初期化などで、用途が結構ありそうな気はしますが、
デストラクタは使うことあるかなぁ?と考えている人も多いと思います。
私も最初は使いませんでしたが、大規模なプログラムを組むようになってくると、
クラス内でメモリの動的確保をしたりします。
その時の解放処理をするために、デストラクタをよく利用するようになりました。
別にこの関数は絶対使わなければいけないわけじゃありません。
ですが、覚えておくと便利なのでしっかり覚えておきましょう。
次回はクラスの継承について説明します。
>> 【クラスの継承】に進む
>> C++入門トップに戻る