継承と仮想関数のしくみを利用し、練習問題8で作成したプログラムを参考にして気象リストを表示するプログラムを作成せよ。ただし、以下の 1) ~ 3) の仕様を満たすこと。
クラス | |
ListItemクラス | コンテナに格納する要素の基本クラス |
char* name : 文字列を指すポインタ | |
void Print() : 文字列を標準出力に表示 | |
Listクラス | ListItemクラスを格納するコンテナ |
void Add(ListItem* p) : pで指定された要素をコンテナに追加 | |
void Sort() : 要素を name に格納されているデータでソート | |
void Print() : 格納した要素のPrintメンバ関数を順に呼び出す | |
WeatherRecord クラス | ListItemクラスから派生して作成する、年月日と天気、最高気温、最低気温、湿度を格納するクラス |
char* weather :天気を格納した文字列を指すポインタ int high :最高気温(℃) int low :最低気温(℃) int pop :湿度(%) |
|
void Print() : 年月日と天気、最高気温、最低気温、湿度を標準出力に表示 (基本クラスの関数をオーバーライド) | |
WeatherRecord(const char* _date, const char* _weather, int _high, int _low, int _pop) : イニシャライザ付のコンストラクタ _date : 年月日を表す文字列 (ListItemクラスのメンバ変数 nameを利用する) _weather :天気を表す文字列 _high :最高気温(℃) _low :最低気温(℃) _pop :湿度(%) 引数で与えられた内容で、メンバ変数を初期化すること。 |
//Listクラスのインスタンスの生成 List weatherlist(100); // エントリーの追加 weatherlist.Add(new WeatherRecord("2023-12-17", "sunny", 12, 2, 20)); weatherlist.Add(new WeatherRecord("2023-12-15", "rain", 10, 6, 70)); weatherlist.Add(new WeatherRecord("2023-12-18", "sunny", 10, -3, 0)); weatherlist.Add(new WeatherRecord("2023-12-16", "cloudy", 16, 8, 30)); //印刷 weatherlist.Print(); cout << "-----------------" << endl; //エントリーのソート weatherlist.Sort(); //印刷 weatherlist.Print(); |
実行結果 |
2023-12-17: sunny: 12/2(℃), 20(%) 2023-12-15: rain: 10/6(℃), 70(%) 2023-12-18: sunny: 10/-3(℃), 0(%) 2023-12-16: cloudy: 16/8(℃), 30(%) ----------------- 2023-12-15: rain: 10/6(℃), 70(%) 2023-12-16: cloudy: 16/8(℃), 30(%) 2023-12-17: sunny: 12/2(℃), 20(%) 2023-12-18: sunny: 10/-3(℃), 0(%)< この後ろに、各自で追加した機能が正常動作することを示す結果も表示すること |
Listクラスを拡張して、あれば良いと思うメンバ関数を追加しなさい。例を以下に示すが、各自が自由な発想で追加してよい。
以下の内容について記載すること
※#pragma pack(1)等と書いてはならない.アライメントを明示的に変更しない場合において考察すること
◎ レポートは,レポートテンプレート の章立てに従い作成すること.
◎ 提出先:Webclass (課題3レポートに提出すること.)
レポートの提出について
レポートは 「レポートの書き方について」をよく読んで各個人で作成し提出すること.
レポートの提出は,pdfファイルを提出すること.
提出方法の詳細については 「プログラミング演習III ガイダンス資料」を参照すること.
提出期限
レポート提出〆切 … 12/25(月) 14:20
書式不備レポート返却 … 1/4(木) 16:00頃
書式不備修正レポート提出 … 1/11(木) 14:20