Как правильно написать консольное приложение на языке C ++ - PullRequest
0 голосов
/ 30 мая 2019

Так что я возился с C ++, пытаясь улучшить свои знания, и наткнулся на идею проекта, которая мне нравится, вот своего рода грубое описание того, чего я пытаюсь достичь.

У меня есть полиморфная настройка, где у меня есть базовый класс типа Меню интерфейс которого:

class Menu
{
protected:
   std::vector<std::string> elements;
public:
   friend void printMenu(Menu &);
   virtual void Commands(int);
};

и производные классы типа AMenu, BMenu ... и т. Д. тела которых выглядят примерно так:

class MainMenu : public Menu
{
public:
    MainMenu();
    void Commands(int);
};

реализация конструктора

Menu::Menu()
{
elements = {"el1","el2"...};
}

Commands принимает int и имеет оператор switch для выполнения функций для каждого Меню , вызываемое printMenu ()

грубая реализация printMenu ()

void printMenu(Menu &M)
{
   //code   
    int counter = 1;

    for (auto x : M.elements)
        std::cout << '(' << counter++ << ')' << ' ' << x << '\n';
   //get user input
   M.Commands(option);
}

Теперь мне бы хотелось, чтобы, если пользовательский ввод говорил: -1 , предыдущее меню отображалось бы для них. что-то вроде AMenu --> BMenu --> CMenu --> BMen -- > AMenu

Я в основном врезался в стену, пытаясь, вот что я попробовал до сих пор:

- Я попытался создать глобальный std::stack, где каждый раз, когда на экран выводится меню, объект этого типа сохраняется в стеке, и если пользователь вводит -1 , объект является таким образом выскочил - Вместо того, чтобы std::stack быть глобальным, я поместил его в Base как статический static std::stack<Menu> S; и каждый раз, когда печатается объект типа Меню , я нажимаю его на S , и когда пользователь вводит -1 , я нажимаю S и printMenu (S.top ());

и пара других отчаянных попыток, все из которых не дали мне желаемого результата, вместо этого я получил, когда пользователь вводит -1 , он отправляет их в предыдущее меню, но затем, когда они пытаются чтобы получить доступ к другой опции из меню, приложение просто выключается!

Я хотел бы знать, насколько жизнеспособен мой путь, и если нет, укажите мне правильный путь.

Я хорошо разбираюсь в базовом C ++ и только что закончил курс «Введение в ООП» в университете, а также получил базовые знания о контейнерах STL и структурах данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...