継承と仮想関数のしくみを利用し、練習問題8で作成したプログラムを参考にして運動記録リストを表示するプログラムを作成せよ。ただし、以下の 1) ~ 3) の仕様を満たすこと。
クラス | |
ListItemクラス | コンテナに格納する要素の基本クラス |
char* name : 文字列を指すポインタ | |
void Print() : 文字列を標準出力に表示 | |
Listクラス | ListItemクラスを格納するコンテナ |
void Add(ListItem* p) : pで指定された要素をコンテナに追加 | |
void Sort() : 要素を name に格納されているデータでソート | |
void Print() : 格納した要素のPrintメンバ関数を順に呼び出す | |
ExerciseLog クラス | ListItemクラスから派生して作成する、年月日と運動メニュー,強度,時間を格納するクラス |
char* exmenu:運動メニューを格納した文字列を指すポインタ double mets :強度(METs) int min :時間(min) |
|
void Print() : 年月日と運動メニュー,強度,時間を標準出力に表示 (基本クラスの関数をオーバーライド) | |
ExerciseLog(const char* _date, const char* _exmenu, double _mets, int _min) : イニシャライザ付のコンストラクタ _date : 年月日を表す文字列 (ListItemクラスのメンバ変数 nameを利用する) _exmenu :運動メニューを表す文字列 _mets :強度(METs) _min :時間(min) 引数で与えられた内容で、メンバ変数を初期化すること。 |
//Listクラスのインスタンスの生成 List menulist(100); // エントリーの追加 menulist.Add(new ExerciseLog("2022-12-15", "cycling", 4.0, 60)); menulist.Add(new ExerciseLog("2022-12-16", "swimming", 8.0, 45)); menulist.Add(new ExerciseLog("2022-12-14", "jogging", 7.0, 30)); menulist.Add(new ExerciseLog("2022-12-17", "dog-walking", 3.0, 45)); //印刷 menulist.Print(); cout << "-----------------" << endl; //エントリーのソート menulist.Sort(); //印刷 menulist.Print(); |
実行結果 |
2022-12-15: cycling: 4(METs), 60(min) 2022-12-16: swimming: 8(METs), 45(min) 2022-12-14: jogging: 7(METs), 30(min) 2022-12-17: dog-walking: 3(METs), 45(min) ----------------- 2022-12-14: jogging: 7(METs), 30(min) 2022-12-15: cycling: 4(METs), 60(min) 2022-12-16: swimming: 8(METs), 45(min) 2022-12-17: dog-walking: 3(METs), 45(min) < この後ろに、各自で追加した機能が正常動作することを示す結果も表示すること |
Listクラスを拡張して、あれば良いと思うメンバ関数を追加しなさい。例を以下に示すが、各自が自由な発想で追加してよい。
以下の内容について記載すること
※#pragma pack(1)等としてアライメントを明示的に変更せずに、各クラスのサイズを調べ、考察すること。
◎ レポートは,レポートテンプレート の章立てに従い作成すること.
◎ 提出先:Webclass (課題3レポートに提出すること.)
レポートの提出について
レポートは 「レポートの書き方について」をよく読んで各個人で作成し提出すること.
レポートの提出は,電子化された文書ファイルを提出すること.
提出方法の詳細については 「プログラミング演習III ガイダンス資料」を参照すること.
提出期限
レポート提出〆切 … 12/26(月) 14:20
書式不備レポート返却 … 1/5(木) 16:00頃
書式不備修正レポート提出 … 1/12(木) 12:30