今回は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( (^ω^)楽勝だお[5],返事がない、ただのしかばねのようだ[19],ハイハイ、ワロスワロス[7]) | (^ω^)楽勝だお|5| |返事がない、ただのしかばねのようだ|19| |ハイハイ、ワロスワロス|7|