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

Создать класс "Список объектов любого типа"

08.10.2016, 19:59. Показов 2112. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Создайте класс, который способен запоминать список объектов не заданного типа
класса (для любого класса). Помогите кто знает (Нужен код, желательно с комментариями)
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.10.2016, 19:59
Ответы с готовыми решениями:

Создать класс "Список объектов любого типа"
Создайте класс, который способен запоминать список объектов не заданного типа класса (для любого класса). #include <iostream>...

Разработайте класс, способный запоминать список объектов незаданного типа класса (для любого класса)
Разработайте класс, способный запоминать список объектов незаданного типа класса (для любого класса).

Создать класс-шаблон, позволяющий хранить коллекцию элементов любого типа
помогите разобраться с этим заданием Создать класс-шаблон, позволяющий хранить коллекцию элементов любого типа.

11
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
08.10.2016, 22:14
Цитата Сообщение от Shadow0671 Посмотреть сообщение
Создайте класс, который способен запоминать список объектов не заданного типа
класса (для любого класса).
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
#include <boost/any.hpp>
#include <iostream>
#include <list>
 
struct bad_list: std::list<boost::any>
{
    using parent = std::list<boost::any>;
    using parent::parent;
};
 
int main()
{
    bad_list mylist;
    
    int  a = 10;
    bool b = true;
    struct {} c;
    
    mylist.emplace_back(a);
    mylist.emplace_back(b);
    mylist.emplace_back(c);
    
    std::cout << "Hello, world!\n";
}
4
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
08.10.2016, 23:07
hoggy, откуда у вас мои наработки? Корпоративный шпионаж?
0
2 / 2 / 1
Регистрация: 07.05.2016
Сообщений: 74
09.10.2016, 12:52  [ТС]
Вроде немного я понял, но что делает #include <boost/any.hpp>
Такой директории у меня нет.
И как это все в класс возвести (или boost/any.hpp это и есть класс?)
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
09.10.2016, 12:56
Цитата Сообщение от Shadow0671 Посмотреть сообщение
Такой директории у меня нет.
Потому что boost не подключен.
Цитата Сообщение от Shadow0671 Посмотреть сообщение
(или boost/any.hpp это и есть класс?)
Да, это класс из библиотеки boost.
0
2 / 2 / 1
Регистрация: 07.05.2016
Сообщений: 74
09.10.2016, 13:04  [ТС]
А есть другой способ что бы класс наглядно было видно? (Без буста)
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
09.10.2016, 13:21
Цитата Сообщение от Shadow0671 Посмотреть сообщение
А есть другой способ что бы класс наглядно было видно? (Без буста)
Использовать std::experimental::any?
http://en.cppreference.com/w/cpp/experimental/any
1
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
09.10.2016, 14:19
Лучший ответ Сообщение было отмечено gru74ik как решение

Решение

Shadow0671, вообще тут нужно уточнить задание. Если подразумевается шаблон класса, который реализует список, то это одно. Этого добра полно, достаточно только поиск по форуму запустить.
Или если подразумевается список объектов, тип которых хранится динамически (то, что тебе предложили с any), то это другое. Без boost, вот например.
0
2 / 2 / 1
Регистрация: 07.05.2016
Сообщений: 74
09.10.2016, 19:41  [ТС]
Я шаманя нашел такое:

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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
const int SUCCESS = 1;
const int FAILURE = 0;
const int DUPLICAT = 2;
const int ERROR_OF_TYPE = -1;
 
class Counter{
    static const int MAX = 50;
    char *type_of_object;
    unsigned int num_of_object;
    char *list_of_objects[MAX];
    void cleanCounter();
public:
    Counter();
    Counter(char *name);
    Counter(const Counter &object);
    ~Counter();
    bool link(char *type);
    int addNameToLIst(char *name, char *type);
    int takeNumOfObjects();
    char *takeTypeOfObjects();
    char *nameByIndex(int index);
};
Counter::Counter()
{
    type_of_object = NULL;
    num_of_object = 0;
    for (int i = 0; i < MAX; i++)
    {
        list_of_objects[i] = NULL;
    }
}
Counter::Counter(char *name)
{
    type_of_object = new char[strlen(name)];
    strcpy(type_of_object, name);
    num_of_object = 0;
    for (int i = 0; i < MAX; i++)
    {
        list_of_objects[i] = NULL;
    }
}
Counter::Counter(const Counter &object)
{
    if(object.type_of_object)
    {
        type_of_object = new char[strlen(object.type_of_object)];
        strcpy(type_of_object, object.type_of_object);
    }
    else
    {
        type_of_object = NULL;
    }
    num_of_object = object.num_of_object;
    for (int i = 0; i < MAX; i++)
    {
        if(object.list_of_objects[i])
        {
            list_of_objects[i] = new char[strlen(object.list_of_objects[i])];
            strcpy(list_of_objects[i], object.list_of_objects[i]);
        }
        else
        {
            list_of_objects[i] = NULL;
        }
    }
}
Counter::~Counter()
 {
     if (type_of_object)
     {
         delete [] type_of_object;
     }
     for (int i = 0; i < MAX; i++)
     {
         if(list_of_objects[i])
         {
             delete[] list_of_objects[i];
         }
     }
 }
bool Counter::link(char *type)
{
    if (!type_of_object)
    {
        delete[] type_of_object;
        type_of_object = new char[strlen(type)];
        strcpy(type_of_object, type);
    }
    else
    {
        type_of_object = new char[strlen(type)];
        strcpy(type_of_object, type);
        cleanCounter();
    }
}
int Counter::addNameToLIst(char *name,char *type)
{
    if (!strcmp(type,type_of_object))
    {
     for(int i = 0 ; i < MAX; i++)
    {
        if (list_of_objects[i] != NULL)
        {
            if(!strcmp(name,list_of_objects[i]))
            {
                return DUPLICAT;
            }
        }
        else
        {
            list_of_objects[i] = new char[strlen(name)];
            strcpy(list_of_objects[i], name);
            num_of_object++;
            return SUCCESS;
        }
    }
    return FAILURE;
    }
    return ERROR_OF_TYPE;
}
int Counter::takeNumOfObjects()
{
    return num_of_object;
}
char *Counter::nameByIndex(int index)
{
    return list_of_objects[index];
}
void Counter::cleanCounter()
{
    num_of_object = 0;
    for (int i = 0; i < MAX; i++)
    {
        if (list_of_objects[i])
        {
            delete[] list_of_objects[i];
            list_of_objects[i] = NULL;
        }
    }
}
 
char* Counter::takeTypeOfObjects()
{
    return type_of_object;
}
Проблема в том что нету комментарий и трудно разобраться
Я вынес этот кусок в .h файл
Создаю объект но не могу обратиться ни к одной из функций

Добавлено через 2 минуты
Просто класс, в котором массив строк
Это имена объектов

Имя класса
Объекты которого нужно запоминать и считать
Есть метод, который может привязать этот счётчик к какому-то типу
И метод добавления имя переменной в список этого класса

Добавлено через 1 час 29 минут
Знает кто как таким воспользоваться?
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
09.10.2016, 20:44
Здесь просто названия разные хранятся. Как это решит твою задачу?
0
2 / 2 / 1
Регистрация: 07.05.2016
Сообщений: 74
09.10.2016, 21:19  [ТС]
Тогда я в тупике
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
09.10.2016, 21:32
Shadow0671, так все-таки. Прояснить по поводу задания не хочешь?
Это задание тебе кто дал? Преподаватель или на собеседовании?
Если это дал преподаватель, то скорее всего нужен шаблон класса, который реализует список.
Вот здесь есть хороший пример с комментариями: Шаблон класса двусвязный список
Если требуется что-то другое, то рассказывай подробнее.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.10.2016, 21:32
Помогаю со студенческими работами здесь

Создать односвязный список из объектов заданного типа
Добрый вечер! Собственно задачка: Определить пользовательский тип, включающий в себя следующие поля: строка, целое число, указатель на...

Создать шаблонный класс List для работы со односвязным списком элементов любого типа
Находил множество вариантов на форуме аналогичных моему, но не получается переделать под свой вариант: Создать шаблонный класс List...

Какой класс позволяет сформировать простейший список объектов разного типа?
Класс List&lt;T&gt; представляет собой простейший универсальный список для хранения однородных объектов. Размер List&lt;T&gt; может динамически...

Создать класс. Список объектов
1. Все фильмы США 2. Все фильмы с 2000 по 2005 г. 3. Все фильмы Спилберга старше 5 лет 4. Все фильмы с буквы А 5. Отсортировать по...

Задание: создать класс по заданному условию; создать массив, содержащий список объектов класса, и реализовать следующие
На междугородной АТС информация о разговорах содержит дату разговора, код и название города, длительность разговора (мин.), тариф, номер...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера 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