今回は コンストラクタ デストラクタについてやります

インスタンス作成(クラス変数のメモリが確保)されたときに
必ず呼ばれる特殊なメンバ関数を コンストラクタと呼びます
メンバ変数の初期化が行えます

インスタンスが(クラス変数のメモリが)破棄されたときに
必ず呼ばれる特殊なメンバ関数を デストラクタと呼びます
メンバ変数の後処理(deleteやライブラリを破棄するなど)が行えます

コンストラクタ、デストラクタはクラス名と同名で戻り値がありません(これが目印ともいえる)

今回使うファイルは次のようになってます。どぞー(-ω-)つ旦
fileconstructer_destructer.cpp
zipでほしい人はこちら
fileconstructer_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;
}

今回の実行結果は次のようになります
constructer_destructer.jpg

コンストラクタ、デストラクタを使いこなすと
クラスの初期化や後処理がかなり楽になるので必ずマスターしてください

前:DirectX講座8回
次:DirectX講座10回

選択肢 投票
(^ω^)楽勝だお 4  
返事がない、ただのしかばねのようだ 19  
ハイハイ、ワロスワロス 7  

添付ファイル: fileconstructer_destructer.cpp 308件 [詳細] fileconstructer_destructer.zip 246件 [詳細] fileconstructer_destructer.jpg 313件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-06-14 (木) 12:08:40