クラスのメンバ関数には、特殊なモノが存在します。
コンストラクタとデストラクタです。
ここではデストラクタについて説明します。(コンストラクタについてはコチラ。)
コンストラクタは、クラスのインスタンス作成時に
自動的に呼ばれる特殊なメンバ関数でしたが、
デストラクタは、そのインスタンスが破棄される直前に自動的に
呼ばれる特殊なメンバ関数です。故意に呼ぶ事もできますが、推奨しません。
デストラクタで行う処理はあまり多くはありませんが、
あるとすれば、クラス内で確保した動的なメモリを解放する処理くらいです。
デストラクタの名前は、クラス名の前に~(チルダ)を付けたモノになります。
クラス名がhitoならば、デストラクタ名は、~hitoになります。
引数や戻り値は設定できません。(void記述も不要。)
デストラクタ利用例
ファイル名:keisan.h
class keisan {
public:
int *ip;
keisan(); // コンストラクタ
~keisan(); // デストラクタ
int *tasizan(int x, int y);
};
|
ファイル名:keisan.cpp
#include "keisan.h"
keisan::keisan() { ip = new int;
}
keisan::~keisan() {
delete ip;
}
int *tasizan(int x, int y) {
*ip = x + y;
return ip;
}
|
ファイル名:main.cpp
#include <iostream>
#include "keisan.h"
using namespace std;
void main(void) {
keisan obj;
int *ans;
ans = obj.tasizan(10, 5);
cout << "10+5=" << *ans << "です"
<< '\n';
}
|
この例では、クラスkeisanのメンバ関数tasizanで足し算の結果を求め、
coutで表示するプログラムです。(実際にはあまり意味のないプログラムです。)
まず、コンストラクタでは、動的にint型のメモリ領域を確保しています。
この領域は、足し算の結果を格納するための領域として使っています。
そして、メンバ関数tasizanでは、足し算結果を動的に確保したメモリ領域に
セットし、その領域のポインタが返され、coutで表示しています。
デストラクタは、そのインスタンスがもうプログラム上で使われないと判断されれば、
呼び出されます。このプログラムでは、
main関数を抜けるとクラスkeisanのインスタンスobjが使用できなくなるので、
その時点で呼ばれる事になります。
デストラクタの動作を確認したい場合は、デストラクタ内に、coutなどで
コンソール上に出力するコードを書き加えるとよく分かります。
スポンサードリンク
|