課題3 レポートについて


レポート課題

継承と仮想関数のしくみを利用し、練習問題8で作成したプログラムを参考にして食事メニューリストを表示するプログラムを作成せよ。ただし、以下の 1) 〜 3) の仕様を満たすこと。

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)

引数で与えられた内容で、メンバ変数を初期化すること。

 

2) main関数に以下の例のようなテスト用コードを記述し、右図のような出力をすること 。

    //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)
<

この後ろに、各自で追加した機能が正常動作することを示す結果も表示すること

 

3)Listクラスには、独自のメンバ関数を最低限一つ追加すること。

Listクラスを拡張して、あれば良いと思うメンバ関数を追加しなさい。例を以下に示すが、各自が自由な発想で追加してよい。

4) (オプション課題) ListItemクラス、Listクラスを使用し、継承によりこれらのクラスの機能を利用してオリジナルのプログラムを作成せよ。

 

注意事項

  1. 各クラスに必要なコンストラクタ・デストラクタ・メンバ関数・メンバ変数は自由に追加して良い。適切な設計、適切なアクセス指定となるように考慮すること。
  2. Listクラス内のデータ構造は指定しないので、配列・リンクトリストなど、各自が自由に工夫して実装すること。
  3. ファイルは適切に分割し、2重インクルード防止などの措置を施すこと。
  4. メモリリークを起こしてはならない。

ヒント

レポートについて

以下の内容について記載すること

1. 課題の概要

2.データ構造

3.プログラム

4.実行結果

5. オプション課題

6.考察

7. 感想

8.参考文献

テンプレートおよび提出期限

◎ レポートは,レポートテンプレート の章立てに従い作成すること.

◎ 提出先:Webclass (上級編レポートに提出すること.)

レポートの提出について

提出期限