>> 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++入門トップに戻る













