コンストラクタには引数があった方がいいときもあるでしょう。今回はそういうときのお話です。
それでは、今回の要点です。
では、いってみましょう。
いきなりですが、前回のクラス CInt でちょっと不満はありませんでしたか? m_num を好きな値で初期化できませんでしたね。これはちょっと問題です。
もちろん、好きな値で初期化できるようにもできます。方法は簡単です。コンストラクタに引数をつければいいのです。
しかし、ちょっと待って下さい。コンストラクタは実体を作る際に呼ばれる、つまり変数宣言文で呼ばれる関数だったはずです。引数なんてどうやって渡せばいいのでしょうか?
これも、とても単純です。こうやるのです。
プログラム | 実行結果 |
---|---|
// Cstruct2.cpp #include <iostream.h> class CInt { public: int m_num; CInt(); CInt(int num); void Disp(); }; // コンストラクタ // オーバーロードしています(第1部第64章参照) CInt::CInt() { m_num = 0; } CInt::CInt(int num){ m_num = num; } // メンバ変数の表示 void CInt::Disp(){ cout << m_num << endl; } int main() { CInt a, b(100), c(40); a.Disp(); b.Disp(); c.Disp(); return 0; } |
0 100 40 |
引数つきコンストラクタを使っているのはここです。
CInt a, b(100), c(40);
何と、まるで変数が関数であるかのように引数を指定しているではありませんか! こんな単純でいいんですね。
このように、クラスのメンバ変数の初期化はコンストラクタで行います。第1,2回のように、構造体と同じようにしてはいけません。
しかしこの方法、配列の宣言では使えそうにありませんね。これはその通りで、配列では引数なしのコンストラクタしか呼べません。他にも制限がありますが、今はまだ触れません。
そして、引数なしのコンストラクタのことをデフォルトコンストラクタと呼びます。
これで終わりです。今回も短いですが、ゆっくりいきましょう。
Last update was done on 2000.8.6
この講座の著作権はロベールが保有しています