Добавил:
vvrstcnho
Рад, если кому-то помог
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторные работы С++ (для ИВТ) / Готовые лабы С++ / Лаба5 / Laba 5 (9)
.cpp#include <iostream>
#include <string>
#include <vector>
#include <locale>
using namespace std;
class MenuItem {
protected:
string title;
public:
MenuItem(const string& t) : title(t) {}
virtual void display() const = 0;
virtual ~MenuItem() {}
};
class SimpleMenuItem : public MenuItem {
public:
SimpleMenuItem(const string& t) : MenuItem(t) {}
void display() const override {
cout << "[" << title << "]";
}
};
class HorizontalMenu : public MenuItem {
vector<SimpleMenuItem*> items;
public:
HorizontalMenu(const string& t) : MenuItem(t) {}
void addItem(SimpleMenuItem* item) {
items.push_back(item);
}
void display() const override {
cout << "Горизонтальное меню \"" << title << "\": ";
for (auto item : items) {
item->display();
cout << " ";
}
cout << endl;
}
};
class VerticalMenu : public MenuItem {
vector<SimpleMenuItem*> items;
public:
VerticalMenu(const string& t) : MenuItem(t) {}
void addItem(SimpleMenuItem* item) {
items.push_back(item);
}
void display() const override {
cout << "Вертикальное меню \"" << title << "\":" << endl;
for (auto item : items) {
cout << " - ";
item->display();
cout << endl;
}
}
};
class HierarchicalMenu : public MenuItem {
vector<MenuItem*> submenus;
public:
HierarchicalMenu(const string& t) : MenuItem(t) {}
void addSubmenu(MenuItem* submenu) {
submenus.push_back(submenu);
}
void display() const override {
cout << "Иерархическое меню \"" << title << "\":" << endl;
for (auto submenu : submenus) {
cout << " ";
submenu->display();
}
}
};
int main() {
setlocale(LC_ALL, "ru_RU.UTF-8");
SimpleMenuItem item1("Файл");
SimpleMenuItem item2("Правка");
SimpleMenuItem item3("Вид");
HorizontalMenu hMenu("Главное");
hMenu.addItem(&item1);
hMenu.addItem(&item2);
hMenu.addItem(&item3);
VerticalMenu vMenu("Настройки");
vMenu.addItem(&item1);
vMenu.addItem(&item2);
HierarchicalMenu mainMenu("Программа");
mainMenu.addSubmenu(&hMenu);
mainMenu.addSubmenu(&vMenu);
hMenu.display();
vMenu.display();
mainMenu.display();
return 0;
}
Соседние файлы в папке Лаба5
