Repository navigation
Expand file tree
/
Copy pathMenu.cpp
More file actions
61 lines (56 loc) · 1.43 KB
/
Copy pathMenu.cpp
File metadata and controls
61 lines (56 loc) · 1.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include<iostream>
#include<list>
#include<string>
using namespace std;
class MenuComponent {
protected:
string name;
public:
MenuComponent(string name) {
this->name = name;
}
string getName() {
return name;
}
virtual void add(MenuComponent* menuComponent) = 0;
virtual void print() = 0;
};
class MenuItem: public MenuComponent {
private:
double price;
public:
MenuItem(string name, double price):MenuComponent(name) {
this->price = price;
}
double getPrice() {
return price;
}
void add(MenuComponent* menuComponent) {}
void print() {
cout << getName() << ":" << getPrice() << endl;
}
};
class Menu: public MenuComponent {
private:
list<MenuComponent*> menuComponents;
public:
Menu(string name): MenuComponent(name){}
void add(MenuComponent* menuComponent) {
menuComponents.push_back(menuComponent);
}
void print() {
cout << endl << getName() << endl;
for(list<MenuComponent*>::iterator iter = menuComponents.begin(); iter!=menuComponents.end(); iter++) {
(*iter)->print();
}
}
};
int main(int argc, const char * argv[]) {
MenuComponent* allMenus = new Menu("ALL MENUS");
MenuComponent* dinerMenu = new Menu("DINER MENU");
MenuComponent* oneFood = new MenuItem("ONE FOOD", 3.23);
allMenus->add(dinerMenu);
dinerMenu->add(oneFood);
allMenus->print();
return 0;
}