Так что я возился с 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 и структурах данных.