#include <iostream.h> class Kakeibo { int zankin; public: Kakeibo(); void Input(int); void Output(int); void Disp(void); }; Kakeibo::Kakeibo(void) { zankin = 0; } void Kakeibo::Input(int mon) { zankin += mon; return; } void Kakeibo::Output(int mon) { zankin -= mon; return; } void Kakeibo::Disp(void) { cout << "残金は" << zankin << "円です" << endl; return; } int main(void) { char sw; int okane; cout << "家計簿" << endl; cout << "I:収入 O:支出 D:残金表示 E:終了" << endl; Kakeibo Mykakei; while(1) { cout << "何をしますか="; cin >> sw; switch(sw) { case 'I':cout << "収入金額="; cin >> okane; Mykakei.Input(okane); break; case 'O':cout << "支出金額="; cin >> okane; Mykakei.Output(okane); break; case 'D':Mykakei.Disp(); break; case 'E':cout << "終了します" << endl; goto End; break; default:cout << "もう一度入力して下さい" << endl; break; } } End: return 0; }
まずは、main関数からみてみましょう。 ここでは、MyKakeiオブジェクトを生成して、 処理を求めるプログラムです。 switch(ここ)の「ここ」にはint型の変数が入ることに 注意して下さい。どうして、char型のswが入っているか わからない人はC言語編第7章をみて下さい。 switch文の中では、swの値によっていろいろなメンバ関数を 呼び出しています。Inputは収入、Outputは支出に関係 あるというのは、想像できますね。変数とか、クラス名とか、 関数名は、その名前をみただけでどんなものか、想像がつく ものにしましょう。
次に、Kakeiboクラスをみてみましょう。 データメンバは、zankinのみです。 しかも、これはprivateですから、クラス外からは 参照も、書き換えもできません。 間違って、残金を書き換えられたら大変ですから、 これは当然ですね。世の中では、 「情報公開」 というのが、流行していますが、プログラムの世界では、 「データの隠蔽」 というのが大流行です。
次に、メンバ関数をみてみましょう。 コンストラクタKakeiboは、残金の初期化をします。 いきなり、zankinにアクセスが起こった場合 まずいことになるのでこれは当然でしょう。 この場合、コンストラクタが呼ばれると常に 残金が0円になってしまいます。後々問題が 起こりそうですね。でも今回は簡単のためにこのまま にしておきましょう。
Inputメンバ関数は、残金にその引数を加えます。
という書き方は、わかりますね。zankin += mon;
と同じです。よくわからない人は、C言語編を 復習してみて下さい。zankin = zankin + mon;
Outputメンバ関数も、残金から引数を引くだけで 説明の必要はないでしょう。
Dispメンバ関数は、残金を表示します。
特別難しいことは、していないので
今回のプログラムは、すぐに理解できたことと思います。
実行結果は、左の通りです。
xなどという入力をすると「もう一度入力して下さい」 と注意を促している点に注意して下さい。
このプログラムでは、いろいろ不満がありますね。
たとえば、残金がマイナスになっても何も
注意されません。それと、一度終了してしまうと
次回は、残金0から再出発です。
その他、いろいろ問題点があります。
少しずつ問題を解決していきましょう。
Update Feb/21/1997 By Y.Kumei