Добавил:
Рад, если кому-то помог Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
1
Добавлен:
01.11.2025
Размер:
2.6 Кб
Скачать
#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