#ifndef ITERATOR__H
#define ITERATOR__H
#include <string>
#include <iostream>
#include <vector>
using namespace std;
//定义菜单项
class MenuItem
{
public:
string name; //菜名
string description; //菜的介绍
bool vegetarian; //是否是素
double price; //价格
MenuItem();
MenuItem(string name, string description, bool vegetarian, double price);//构造函数,初始化菜单项
string getName();
string getDescription();
double getPrice();
bool isVegetrian();
};
//早餐菜单
class PancakeHouseMenu
{
public:
vector<MenuItem> menuitems;//使用vector存储菜单项
PancakeHouseMenu();
void addItem(string name, string description, bool vegetarian, double price);//添加菜单项
vector<MenuItem> getMenuItems();//返回菜单项列表
};
//中餐菜单
#define MAX_ITEMS 6 //数组菜单默认大小设为6
class DinerMenu
{
public:
int size; //菜单数目
MenuItem menuItems[MAX_ITEMS];//使用数组保存菜单项
DinerMenu();
void addItem(string name, string description, bool vegetarian, double price);//添加菜单项
MenuItem* getMenuItems();//返回菜单数组
};
#endif
菜单类的实现:
#include "iterator.h"
MenuItem::MenuItem(string name, string description, bool vegetarian, double price)
{
this->name = name;
this->description = description;
this->vegetarian = vegetarian;
this->price = price;
}
MenuItem::MenuItem(){};//由于数组是静态定义,因此会调用MenuItem的默认构造函数
string MenuItem::getDescription() { return description; }
string MenuItem::getName() { return name; }
double MenuItem::getPrice() { return price; }
bool MenuItem::isVegetrian() { return vegetarian; }
//早餐菜单操作实现
PancakeHouseMenu::PancakeHouseMenu()
{
//默认添加一些菜单项
addItem("Breakfast_1", "Description_1", true, 2.99);
addItem("Breakfast_2", "Description_2", false, 2.99);
addItem("Breakfast_3", "Description_3", true, 3.49);
addItem("Breakfast_4", "Description_4", true, 3.59);
}
void PancakeHouseMenu::addItem(string name, string description, bool vegetarian, double price)
{
MenuItem item(name, description, vegetarian, price);//新建菜单项
menuitems.push_back(item);//加入菜单
}
vector<MenuItem> PancakeHouseMenu::getMenuItems()
{
return menuitems;
}
//中餐菜单操作实现
DinerMenu::DinerMenu()
{
//默认添加一些菜单项
addItem("Dinner_1", "Description_Dinner_1", true, 2.99);
addItem("Dinner_2", "Description_Dinner_2", false, 2.99);
addItem("Dinner_3", "Description_Dinner_3", false, 3.29);
addItem("Dinner_4", "Description_Dinner_4", false, 3.05);
}
void DinerMenu::addItem(string name, string description, bool vegetarian, double price)
{
MenuItem item(name, description, vegetarian, price);//新建菜单项
if(this->size >= MAX_ITEMS)
cout<<"Sorry, menu is full!Can't add item to menu"<<endl;
else
menuItems[size++] = item;
}
MenuItem* DinerMenu::getMenuItems()
{
return menuItems;
}
现在的问题是:有两种不同的菜单表现方式,这会带来什么问题???