継承と仮想関数のしくみを利用し、練習問題8で作成したプログラムを参考にして食事メニューリストを表示するプログラムを作成せよ。ただし、以下の 1) 〜 3) の仕様を満たすこと。
クラス | |
ListItemクラス | コンテナに格納する要素の基本クラス |
char* name : 文字列を指すポインタ | |
void Print() : 文字列を標準出力に表示 | |
Listクラス | ListItemクラスを格納するコンテナ |
void Add(ListItem* p) : pで指定された要素をコンテナに追加 | |
void Sort() : 要素を name に格納されているデータでソート | |
void Print() : 格納した要素のPrintメンバ関数を順に呼び出す | |
MenuRecord クラス | ListItemクラスから派生して作成する、年月日と食事メニュー,カロリー,分量を格納するクラス |
char* menu:食事メニューを格納した文字列を指すポインタ double calorie :カロリー(Kcal) int weight :分量(g) |
|
void Print() : 年月日と食事メニュー,カロリー,分量を標準出力に表示 (基本クラスの関数をオーバーライド) | |
MenuRecord(const char* _date, const char* _menu, int _calorie, int _weight) : イニシャライザ付のコンストラクタ _date : 年月日を表す文字列 (ListItemクラスのメンバ変数 nameを利用する) _menu :食事メニューを表す文字列 _calorie :カロリー(Kcal) _weight :分量(g) 引数で与えられた内容で、メンバ変数を初期化すること。 |
//Listクラスのインスタンスの生成 List menulist(100); // エントリーの追加 menulist.Add(new MenuRecord("2016-06-24", "curry&rice", 862.5, 516)); menulist.Add(new MenuRecord("2016-06-25", "beef_stew", 594.4, 535)); menulist.Add(new MenuRecord("2016-06-23", "tomato_soup", 60.3, 200)); menulist.Add(new MenuRecord("2016-06-26", "sandwitch",150.1, 365)); //印刷 menulist.Print(); cout << "-----------------" << endl; //エントリーのソート menulist.Sort(); //印刷 menulist.Print(); |
実行結果 |
2016-06-24: curry&rice: 862.5(Kcal), 516(g) 2016-06-25: beef_stew: 594.4(Kcal), 535(g) 2016-06-23: tomato_soup: 60.3(Kcal), 200(g) 2016-06-26: sandwitch: 150.1(Kcal), 365(g) ----------------- 2016-06-23: tomato_soup: 60.3(Kcal), 200(g) 2016-06-24: curry&rice: 862.5(Kcal), 516(g) 2016-06-25: beef_stew: 594.4(Kcal), 535(g) 2016-06-26: sandwitch: 150.1(Kcal), 365(g) < この後ろに、各自で追加した機能が正常動作することを示す結果も表示すること |
Listクラスを拡張して、あれば良いと思うメンバ関数を追加しなさい。例を以下に示すが、各自が自由な発想で追加してよい。
以下の内容について記載すること
◎ レポートは,レポートテンプレート の章立てに従い作成すること.
◎ 提出先:Webclass (上級編レポートに提出すること.)
レポートの提出について
レポートは 「レポートの書き方について」をよく読んで各個人で作成し提出すること.
レポートの提出は,電子化された文書ファイルを提出すること.
提出方法の詳細については 「プログラミング演習III ガイダンス資料」を参照すること.
提出期限
レポート提出〆切 … 7/8(金) 8:40
書式不備レポート返却 … 7/11(月) 17:00頃
書式不備修正レポート提出 … 7/19(火) 12:40 (7/18(月)が祝日のため)