第4回目は コンストラクタというのは、 変数の寿命が尽きるのは コンストラクタを定義するには、 たとえば、Myclassというクラスの #include <iostream> using namespace std; class Myclass//←クラス名Myclass { private: public: // コンストラクタ(戻り値かかない+クラス名の関数) Myclass() { cout << "変数宣言時に必ずよばれます" << endl; } // デストラクタ(戻り値かかない+クラス名の関数先頭に「~」) ~Myclass() { cout << "変数の寿命が尽きるとき、必ず呼ばれる" << endl; } }; int main() { Myclass mc;//←Myclass型の変数宣言時に必ずコンストラクタが呼ばれる return 0; }//←変数の寿命が尽きるとき、必ずMyclassのデストラクタが呼ばれる 注意としては、コンストラクタやデストラクタをpublicで宣言しないと また、コンストラクタやデストラクタも関数のオーバロードをすることができます。 コンストラクタやデストラクタは変数ごとに別々に呼び出されます #define _CRT_SECURE_NO_WARNINGS #include <string.h> #include <iostream> using namespace std; class Myclass { private: int a; char name[256]; public: // コンストラクタ Myclass() { a = 10; strcpy(name,"default"); cout << "引数なしコンストラクタが呼ばれました" << endl; cout << "name = " << name << " a = " << a << endl; } // コンストラクタのオーバーロード Myclass(int input,char *inputname):a(input) { strcpy(name,inputname); cout << "引数つきコンストラクタが呼ばれました" << endl; cout << "name = " << name << " a = " << a << endl; } // デストラクタ ~Myclass() { cout << "name = " << name << "は消されました " << endl; } }; int main() { Myclass mc1; // ←引数なしコンストラクタ Myclass mc2(10,"mc2"); // ←引数つきコンストラクタの呼び出し return 0; }//←変数の寿命が尽きるとき、必ずMyclassのデストラクタが呼ばれる mc1は引数なしのコンストラクタが呼ばれ、 Myclass(int input,char *inputname) { a = input; strcpy(name,"default"); } としても同じですが、初期化子での代入のほうが 初期化子を連続で書く場合は class Myclass { private: int a,b; public: Myclass(int inputA,int inputB);a(inputA),b(inputB) {} }; なお連続で変数を書くときは Myclass mc1,mc2(10,"mc2"); になります。 デストラクタについて細かいことですがデストラクタの呼び出し順番は デストラクタに関してはオブジェクトが使われなくなったら(スコープを外れたら)
|