@tj57

Как реализовать класс стека на указателях и на массиве в одной программе?

Задание: на вход программы подается строка, которая содержит латинские символы и два специальных символа: # и @. Символ # означает, что необходимо стереть последний символ во входной строке, символ @ означает, что нужно стереть все символы перед ним. Необходимо написать программу, которая будет считывать исходную строку и выдавать результат после обработки спец. символов.
Для решения задачи необходимо написать стек на массиве и указателях. Обе реализации должны поддерживать общий интерфейс стека со следующими операциями:
push — добавить символ в стек;
pop — удалить последний символ из стека;
makeEmpty — очистить стек.
Важно: в стеке символы будут в обратном порядке. В ответе необходимо перевернуть результат.

Формат ввода

Первая строка состоит из одного символа "a" или "l" - тип реализации стека ("a" - array, "l" - list). Вторая строка содержит входную последовательность, в которой могут встречаться спец. символы: # и @.

Я создал родительский класс Stack и два наследных класса для реализации на указателях и на массиве.
https://pastebin.com/NmHK0fyy
Не могу понять, как создавать объекты при вводе
То есть, если в условии создаем стек того класса, символ которого мы ввели, то как дальше реализовать методы, если неизвестно, какой стек мы создадим ?
  • Вопрос задан
  • 629 просмотров
Пригласить эксперта
Ответы на вопрос 2
Nipheris
@Nipheris Куратор тега C++
Почитайте про полиморфизм вообще, и конкретно про его реализацию для классов в C++ в форме виртуальных функций.
Ответ написан
Комментировать
@cash-metall
AbstractStack * stack;
if(намассиве) stack = new StackArray;
else stack = new StackPointer;

методы push pop makeEmpty должны быть виртуальными

пользоваться так:
stack.push(чтототам)
stack.pop
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы