- 追加された行はこの色です。
- 削除された行はこの色です。
今回はSIZE(20){ COLOR(#ffaa00){ コンストラクタ}}とSIZE(20){ COLOR(#ffaa00){デストラクタ}}についてやります
インスタンス作成(クラス変数のメモリが確保)されたときに
SIZE(20){ COLOR(#ffaa00){ 必ず呼ばれる}}特殊なメンバ関数をSIZE(20){ COLOR(#ffaa00){ コンストラクタ}}と呼びます
SIZE(20){ COLOR(#ffaa00){ メンバ変数の初期化が行えます}}
インスタンスが(クラス変数のメモリが)破棄されたときに
SIZE(20){ COLOR(#ffaa00){ 必ず呼ばれる}}特殊なメンバ関数をSIZE(20){ COLOR(#ffaa00){ デストラクタ}}と呼びます
SIZE(20){ COLOR(#ffaa00){ メンバ変数の後処理(deleteやライブラリを破棄するなど)が行えます}}
SIZE(20){ COLOR(#ffaa00){ コンストラクタ、デストラクタはクラス名と同名で戻り値がありません}}(これが目印ともいえる)
今回使うファイルは次のようになってます。どぞー(-ω-)つ旦
・&ref(constructer_destructer.cpp);
zipでほしい人はこちら
・&ref(constructer_destructer.zip);
////////////////////////////////////////
// コンストラクタ・デストラクタ
////////////////////////////////////////
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
// プレイヤークラス
class Player
{
public:
char Name[256];
int HP;
int MP;
FILE* fp; // ファイルポインタ
// コンストラクタ(クラス名と同名で戻り値なし)
// インスタンス(クラス変数のメモリ)が作成されたとき必ず呼ばれる特殊なメンバ関数
Player();
// デストラクタ(クラス名と同名で戻り値なし、先頭に~チルダをつける)
// インスタンス(クラス変数のメモリ)が破棄されたとき必ず呼ばれる特殊なメンバ関数
~Player();
// セーブ
void Save(const char* FileName);
};
// コンストラクタ(戻り値なし)
Player::Player()
{
// メンバ変数の初期化をする
strcpy(Name,"Player");
HP = 0;
MP = 0;
printf("%s コンストラクタが呼ばれた\n",Name);
fp = NULL;
}
// デストラクタ
Player::~Player()
{
printf("%s デストラクタが呼ばれた\n",Name);
// メンバ変数の後処理を行う
if(fp != NULL){
fclose(fp);
printf("ファイルクローズ\n");
}
}
// セーブ
void Player::Save(const char* FileName)
{
if(fp == NULL){
fp = fopen(FileName,"w");
printf("ファイルオープン\n");
}
fprintf(fp,"Name:%s HP = %d MP = %d\n",Name,HP,MP);
printf("セーブ完了\n");
}
int main(){
Player* player1 = new Player;
printf("Name:%s HP = %d MP = %d\n",player1->Name,player1->HP,player1->MP);
delete player1; // player1の寿命はここまで、deleteでクラス変数のメモリが解放される
printf("\n\n");
{
// ローカル変数として作成
Player player2;
printf("Name:%s HP = %d MP = %d\n",player2.Name,player2.HP,player2.MP);
player2.Save("save.txt");
}// player2の寿命はここまで、ブロック{}の外側に出たらローカル変数は死ぬ
printf("\n\n");
// 配列の場合でもコンストラクタ・デストラクタは必ず呼ばれる
Player players[4];
return 0;
}
今回の実行結果は次のようになります
&ref(constructer_destructer.jpg);
コンストラクタ、デストラクタを使いこなすと
クラスの初期化や後処理がかなり楽になるので必ずマスターしてください
前:DirectX講座8回
次:DirectX講座10回
#vote( (^ω^)楽勝だお[0],返事がない、ただのしかばねのようだ[5],ハイハイ、ワロスワロス[3])
#vote( (^ω^)楽勝だお[0],返事がない、ただのしかばねのようだ[6],ハイハイ、ワロスワロス[3])