С++. Наследование, абстрактный класс, multiset
Помогите, не могу понять как реализовать классы правильно.
Само задание:
2 задание В небольшом тексте (30-40 слов) необходимо выделить слова из многих букв (Тип: А) и однобуквенные слова (Тип: Б). Базовый тип (абстрактный) для указанных типов: Х. Заполнить объектами этих типов базу данных применяя шаблонный тип multiset. Вывести на консоль, последовательно обращаясь к содержимому БД, многобуквенные слова. Они должны быть
отсортированы по алфавиту. Не забывать освобождать ресурсы.
Я понимаю, что нужно нужно сделать абстрактный класс и унаследовать от него 2 класса. Но не могу понять, где объявлять переменную которая и будет хранить слова.
Я реализовал так:
*Прикрепил фото*
Если с записью проблем вроде бы нет, то с попыткой вывода появляются. Тк. объявить 2 метода, которые возвращают разные данные не могу, а также когда вызываю get для родительского класса, он не перенаправляет вызов к дочернему, а сам выполняет функцию.




Абстрактным называется такой класс, в котором имеется хотя бы одна чистая виртуальная функция. Её синтаксис, например:
virtual double area()const = 0;
virtual void show(const char* msg) = 0;
Создавать экземпляры такого класса нельзя, можно только объявить указатель базового абстрактного класса. Каждый абстрактный класс обязан иметь реализацию виртуального деструктора.
Во всех производных классах от базового абстрактного в обязательном порядке следует переопределить чистые виртуальные функции. Наследование также должно быть виртуальным и публичным. Например,
struct A {
virtual ~A() {}
virtual void show()const = 0;
};
struct B : virtual public A {
void show()const override {
puts("Yes!");
}
};
Класс и структура в С++ являются классами. Только в классе по умолчанию все поля private, а в структуре – public.
1. Вы создали структуру, а не абстрактный класс (https://codelessons.ru/cplusplus/klassy-v-c-rukovodstvo-dlya-nachinayushhix.html)
2. Переменную, которая хранит слово нужно объявлять внутри ваших дочерних двух классов как поле этих классов, в случае однобуквенного слова это может быть переменная типа char, а в многобуквенном string
3. когда вы создадите абстрактный класс вы не сможете создать его экземпляр -(ограничение абстрактногоо класса) и, если правильно оформите функции, не сможете их вызвать.
4. Соответственно в классах потомках вы реализовываете и конструктор и вызываемые функции.