Kakeiboクラスは、全く手を付けないのでこのクラスの メンバ関数は、以前のものをそっくりそのまま使います。 新しく加えたKomokuクラスのメンバ関数を考えます。
まずは、コンストラクタですがこれは、単に、データメンバに 0を代入しておきましょう。
ま、こんな感じになるでしょう。まちがっても コンストラクタにreturn文は書かないで下さい。 コンストラクタは何も返しません。 (コンストラクタはケチだ)Komoku::Komoku(void) { Shokuhi = 0; Kosaihi = 0; Others = 0; OutgoTotal = 0; Kyuyo = 0; Zatsushu = 0; IncomeTotal = 0; Item = 0; }
次はSetSection関数を作りましょう。まずは、収入か支出かを たずねます。収入なら給与か、その他の収入かをたずねます。 支出なら食費か、交際費か、その他の支出かをたずねます。 項目が決まったら、データメンバのItemに値をしまっておきます。
void Komoku::SetSection(void) { char kind[8]; while(1) { cout << "収入(I) 支出(O)="; cin >> kind; if (kind[0] == 'I' || kind[0] =='O') break; else cout << "入力が不正です" << endl; } if (kind[0] == 'I') { cout << "給与(3) その他の収入(4)="; }else { cout << "食費(1) 交際費(2) その他(0) ="; } cin >> Komoku::Item; return; }
次は、SetKingaku関数を考えましょう。データメンバの Itemの内容によってたしたり、引いたりをすればよいだけですね。
残金zankinは、相続元クラス(基底クラス)のメンバなので Kakeibo::zankinとスコープ解決演算子を使っていることに注意して下さい。 また、各caseで同じような計算が繰り返されています。もう少し 工夫してすっきりしたプログラムにしてみて下さい。 (こういうのを「いもプログラム」といいます)void Komoku::SetKingaku(int money) { switch(Item) { case 0:Others += money; OutgoTotal = Others + Shokuhi + Kosaihi; Kakeibo::zankin -= money; break; case 1:Shokuhi += money; OutgoTotal = Others + Shokuhi + Kosaihi; Kakeibo::zankin -= money; break; case 2:Kosaihi += money; OutgoTotal = Others + Shokuhi + Kosaihi; Kakeibo::zankin -= money; break; case 3:Kyuyo += money; IncomeTotal = Kyuyo + Zatsushu; Kakeibo::zankin += money; break; case 4:Zatsushu += money; IncomeTotal = Kyuyo + Zatsushu; Kakeibo::zankin += money; break; default: cout << "エラー!" << endl; break; } return; }
最後は、Disp関数ですね。これは、単に各項目を表示するだけなので 特別難しくはないでしょう。
はい、これらのメンバ関数の中身をfclass.hに書いて いよいよビルドしてみましょう。ここで注意ですが xx.hファイルを修正しても、VC++1.51の場合ビルドボタンを押しても ダメです。リビルド・ボタンを押して下さい。 コンパイルの設定によってはビルド・ボタンでもよいのかもしれません。 (筆者は何も考えずにリビルドしています) xx.cppを修正した時はビルド・ボタンで大丈夫です。 それと、この関数はKakeiboクラスにも同じ名前のものがあります。 元の(Kakeibo)関数を仮想関数として宣言しても問題ありません。void Komoku::Disp(void) { cout << endl; cout << "給与=" << Kyuyo << endl; cout << "その他の収入=" << Zatsushu << endl; cout << "収入合計=" << IncomeTotal << endl; cout << endl; cout << "食費= " << Shokuhi << endl; cout << "交際費= " << Kosaihi << endl; cout << "その他= " << Others << endl; cout << "支出合計= " << OutgoTotal << endl; cout << endl; cout << "残金=" << Kakeibo::zankin << endl; return; }
では、プログラムを実行してみましょう。
はい。実行結果は左の図の通りです。
前回までの残金はファイルからきちんと読み出しています。
終了時には今回の残金をファイルに記録しています。
いろいろやってみて下さい。
そして、不満な点を少しずつ改良していって下さい。
Update Feb/24/1997 By Y.Kumei