Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 11.05.2021
Сообщений: 6

Реализация наследования 2-х структур от абстрактной структуры

11.05.2021, 18:38. Показов 2069. Ответов 10

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

Я понимаю, что нужно нужно сделать абстрактный класс и унаследовать от него 2 класса. Но не могу понять, где объявлять переменную которая и будет хранить слова.
Я реализовал так:
*Прикрепил фото*
Если с записью проблем вроде бы нет, то с попыткой вывода появляются. Тк. объявить 2 метода, которые возвращают разные данные не могу, а также когда вызываю get для родительского класса, он не перенаправляет вызов к дочернему, а сам выполняет функцию.
Миниатюры
Реализация наследования 2-х структур от абстрактной структуры   Реализация наследования 2-х структур от абстрактной структуры  
Изображения
  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.05.2021, 18:38
Ответы с готовыми решениями:

Чем отличаются структуры для наследования интерфейса от структур для наследования реализаций?
Дорогие программисты, во первых, хочу поздравить вас с Наступающим новым Годом! Я к вам обращаюсь с маленькой просьбой. Я никак не могу...

Структуры.Обработка массивов структур.Создать массив структур из 10-ти элементов
Создать массив структур из 10-ти элементов: <Номер договора><Фамилия клиента><стоимость товара><выплаченная сумма> ...

Реализация наследования
Нужно создать наследование, но у меня не получается использовать функции(FillArray) поза классом. Помогите исправить ошибку #include...

10
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
11.05.2021, 18:52
И это вообще компилируется? multiset тогда указатели должен хранить.
0
 Аватар для Recrut_rf
388 / 333 / 65
Регистрация: 14.10.2014
Сообщений: 1,438
11.05.2021, 18:57
Забавно видеть в структуре публичные поля . Похоже, кто-то теорию пропускал
0
0 / 0 / 0
Регистрация: 11.05.2021
Сообщений: 6
11.05.2021, 19:02  [ТС]
А как мне производить заполнение тогда?

Добавлено через 1 минуту
Изначально все было корректно, но потом когда начались проблемы с set пришлось их как-то решать. В итоге имеем то, что имеем
0
 Аватар для Recrut_rf
388 / 333 / 65
Регистрация: 14.10.2014
Сообщений: 1,438
11.05.2021, 19:05
И наследование здесь закрытое, то есть методы родителя извне недоступны - только в классе потомке - не ну может так оно и задумано я х/з.

Добавлено через 2 минуты
Цитата Сообщение от Lozb1k Посмотреть сообщение
В итоге имеем то, что имеем
имеем пробелы в знаниях - решение - самое простое - почитать любую нормальную книгу по плюсам (которая под тыщу страниц). Там про наследование точно будет написано с примерами и прочими куртизанками.
0
0 / 0 / 0
Регистрация: 11.05.2021
Сообщений: 6
11.05.2021, 19:06  [ТС]
Цитата Сообщение от Recrut_rf Посмотреть сообщение
Забавно видеть в структуре публичные поля . Похоже, кто-то теорию пропускал
И да программа компилируется, поле с данными изначально было private. Да, я знаю, что по умолчанию в структуре поля public, а в классе private.
0
 Аватар для Recrut_rf
388 / 333 / 65
Регистрация: 14.10.2014
Сообщений: 1,438
11.05.2021, 19:12
Цитата Сообщение от Lozb1k Посмотреть сообщение
где объявлять переменную которая и будет хранить слова
Я бы отправил её в абстрактный класс и создал бы в нём один чистый виртуальный метод - добавление слова в базу (в мультисет). Ну а в классах потомках реализовал бы уже свои специфические методы - по одному в каждом. В одном где

Цитата Сообщение от Lozb1k Посмотреть сообщение
необходимо выделить слова из многих букв (Тип: А)
В другом

Цитата Сообщение от Lozb1k Посмотреть сообщение
днобуквенные слова (Тип: Б)
Добавлено через 1 минуту
Цитата Сообщение от Lozb1k Посмотреть сообщение
я знаю, что по умолчанию в структуре поля public, а в классе private
ну и зачем тогда публичные поля делать "ещё более публичными..." ?
0
0 / 0 / 0
Регистрация: 11.05.2021
Сообщений: 6
11.05.2021, 19:55  [ТС]
Спасибо, обязательно прочитаю.

Добавлено через 3 минуты
А сам multiset объявлять в классе абстрактном?

Добавлено через 10 минут
Цитата Сообщение от Recrut_rf Посмотреть сообщение
Я бы отправил её в абстрактный класс и создал бы в нём один чистый виртуальный метод - добавление слова в базу (в мультисет). Ну а в классах потомках реализовал бы уже свои специфические методы - по одному в каждом. В одном где



В другом



Добавлено через 1 минуту

ну и зачем тогда публичные поля делать "ещё более публичными..." ?
А сам multiset в mian объявлять?

Добавлено через 14 минут
Как я понимаю каждый объект класса наследника должен хранить 1 слово либо много- либо однобуквенное. И соответственно в multiset они должны сортироваться по возрастанию по умолчанию. Получается я должен заполнять multiset <basic*> двумя наследуемыми классами multi и single. А потом производить вывод, если объект класса multi, то выводить его слово на экран.

Добавлено через 13 минут
Получилось так:

Basic.h
#include <string>
using namespace std;
struct basic
{
string word;
virtual void setWord(string w) = 0;
virtual string getWord() = 0;
};

Single.h
#include "Basic.h"
struct Single :
public basic
{
void setWord(string w) override;
string getWord() override;
};
0
 Аватар для Recrut_rf
388 / 333 / 65
Регистрация: 14.10.2014
Сообщений: 1,438
12.05.2021, 08:50
Lozb1k, вот небольшой пример (без какой либо смысловой нагрузки - просто пример)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include <iostream>
#include <map>
#include <random>
 
using namespace std;
 
class AbstractBase
{
protected:
    multimap<int, int> base;    
 
public:
    virtual void addBase(int val) = 0;
 
    void show()
    {
        for (auto val : base)
            cout << val.first << ' ' << val.second << " | ";
        cout << endl;
    }
};
 
class DerivedOne : public AbstractBase
{
public:
 
    // Унаследовано через AbstractBase
    virtual void addBase(int val) override
    {
        if (val % 2 == 0)
            base.emplace(count++, val);
    }
 
private:
    int count = 0; // счётчик - будет за ключ елемента
};
 
class DerivedTwo : public AbstractBase
{
public:
 
    // Унаследовано через AbstractBase
    virtual void addBase(int val) override
    {
        if (val % 2 != 0)
            base.emplace(count++, val);
    }
 
private:
    int count = 0; // счётчик - будет за ключ елемента
};
 
 
 
int main(int argc, char* argv[])
{   
    DerivedOne derivedOne;
    DerivedTwo derivedTwo;
 
 
    for (size_t i = 0; i < 100; ++i)
    {       
        derivedOne.addBase(rand() % 100);
        derivedTwo.addBase(rand() % 100);
    }
    
    cout << "derivedOne.show: \n";
    derivedOne.show();
 
    cout << "derivedTwo.show: \n";
    derivedTwo.show();
 
    system("pause>nul");
    return 0;
}
0
 Аватар для Annemesski
2673 / 1335 / 480
Регистрация: 08.11.2016
Сообщений: 3,688
12.05.2021, 13:53
Цитата Сообщение от Recrut_rf Посмотреть сообщение
И наследование здесь закрытое
в структурах и наследование по умолчанию public.
1
 Аватар для Recrut_rf
388 / 333 / 65
Регистрация: 14.10.2014
Сообщений: 1,438
12.05.2021, 20:26
Цитата Сообщение от Annemesski Посмотреть сообщение
в структурах и наследование по умолчанию public.
вот я неграмотный балбес - совсем забыл о том, что в структурах всё по-умолчанию паблик. Спасибо за напоминание
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.05.2021, 20:26
Помогаю со студенческими работами здесь

Реализация НАСЛЕДОВАНИЯ
1 ) На основании одного ( Handbook ) классу создать походный класс (Student ) 2 ) В классе (Student ) реализовать конструктор по...

Реализация наследования
Здравствуйте, при решении лабораторной возникла такая проблема: при создании объекта производного класса в конструкторе базового...

Реализация наследования в справочниках.
Я только начинаю изучать 1С и возник вопрос, как реализуется наследование в объектах Справочник? Меня интересует такая же возможность как...

Реализация одиночного наследования
Парни, выручайте! а) Создать иерархию классов датчик – абстрактный базовый класс и датчики температуры, влажности и скорости ветра....

Классы и наследования. Реализация интерфейсов
Построить иерархию классов в соответствии с вариантом задания: Деталь, механизм, изделие, узел. Помогите добавить. Не хватает...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru