そのくらいなら、前回作ったクラスを少し変更するだけで できそうです。でも、今回は練習のため前回まで作った クラスには、一切変更を加えません。
今回は、少しプログラムが長くなるので クラスの定義は、kclass.hというファイルにまとめました。 本家本元のソースファイルに#include "kclass.h"という のを忘れずに入れて下さい。//kclass.h class Kakeibo { protected: int zankin; public: Kakeibo(); void Input(int); void Output(int); void Disp(void); int GetZankin(void); void SetZankin(void); }; class Komoku : public Kakeibo { int Shokuhi; int Kosaihi; int Others; int OutgoTotal; int Kyuyo; int Zatsushu; int IncomeTotal; int Item; public: Komoku(void); void SetSection(void); void SetKingaku(int); void Disp(void); };
Kakeiboクラスは、前回と同じです。 このKakeiboクラスからKomokuクラスを導出(派生)します。 クラスの継承についてわからない(忘れた)人は、 第10章を参照して下さい。 クラスの継承の時のアクセスコントロールについて よくわからないときはpublicとしておいて下さい。 昔のコンパイラではクラスの継承のアクセスコントロールを 記述しなくてもよいものもあるようですが、 きちんと書くのが正しい書き方でしょう(多分)。
では、Komokuクラスのメンバをみてみましょう。 食費、交際費、その他(の支出)、支出合計、 給与、雑収、収入合計、は名前から類推できますね。 Itemはどの項目を選んだかを入れておく変数です。
次に、メンバ関数をみてみましょう。
コンストラクタは、多分データメンバを初期化するとき
に使うでしょう。SetSection関数は、収入か支出かまた
その項目はどれかをセットする関数にします。
SetKingaku関数は選んだ項目の金額をセットする関数です。
Disp関数は、その名の通り各項目の表示です。
ここで、Disp関数はKakeibo関数にも同名の関数があることに
注意して下さい。
さて、クラスのだいたいの構造ができたらmain関数は どんな感じになるでしょうか。 まず、項目クラスのオブジェクトMyKomokuを生成します。 次に、SetSectionメンバ関数を呼んで、項目を設定します。 項目が決まったら金額を入力します。そして、 SetKingaku関数で金額をセットします。 これをグルグル回しにすればよいですね。 サービスで金額をセットしたら自動的に各項目を 表示させてもよいですね。 最後に残金をKakeiboクラスのメンバ関数を使って ファイルに記録します。
#include <iostream.h> #include <fstream.h> #include <stdlib.h> #include "kclass.h" #include "fclass.h" int main(void) { char sw; int okane; cout << "家計簿" << endl; Komoku MyKomoku; while(1) { MyKomoku.SetSection(); cout << "金額="; cin >> okane; MyKomoku.SetKingaku(okane); MyKomoku.Disp(); cout << "続けますか(Y/N)"; cin >> sw; if (sw == 'N') break; } MyKomoku.SetZankin(); return 0; }
どうです。main関数だけみると、簡単そうに見えますね。
簡単そうに見えるということが大事です。
次回は、メンバ関数の中身を考えてみましょう。
本当にうまく動くか心配ですね・・・ (^-^;) 。
Update Feb/24/1997 By Y.Kumei