Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 13.05.2014
Сообщений: 36
1

Как создать структуру-список, поля которой — ссылка на такую же структуру

19.06.2014, 16:58. Показов 1548. Ответов 11
Метки нет (Все метки)

Суть вопроса в том, как создать структуру-список, поля которой - ссылка на сл. элемент(такую же структуру) и ссылка на объект, относящийся к любому из классов. Проще говоря - список из объектов, относящихся к разным классам.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.06.2014, 16:58
Ответы с готовыми решениями:

Как создать структуру, где будут поля с указателями на эту же структуру?
#include <stdio.h> #include <stdlib.h> typedef struct DoubleQueue { queue* ar;...

C# + DOM (как создать такую структуру программно)
Нужно создать такую структуру в C#. <root> <node1 id=”1”> <node11>11.11</node11>...

Написать структуру у которой 2 целочисленных поля, объявить массив из 5 соответствующих структур
помогите пожалуйсто написать программу.очень надо. Написать структуру у которой 2 целочисленных...

Как организовать такую структуру
Здравствуйте! Не знаю, как на уровне БД решить следующую задачу: есть таблица с учетной записью...

11
Котовчанин
940 / 480 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 37
19.06.2014, 17:03 2
Такое?
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
#include <iostream>
 
class Class1
{
public: 
    Class1()
    {
        std::cout << "Class1!!! \n";
    }
};
 
class Class2
{
public: 
    Class2() 
    {
        std::cout << "Class2!!! \n";
    }
};
 
class Class3
{
public: 
    Class3()
    {
        std::cout << "Class3!!! \n";
    }
};
 
struct SomeStruct
{
    Class1* class1;
    Class2* class2;
    Class3* class3;
};
 
int main()
{
    Class1 *cl1 = new Class1();
    Class2 *cl2 = new Class2();
    Class3 *cl3 = new Class3();
    SomeStruct str;
    str.class1 = cl1;
    str.class2 = cl2;
    str.class3 = cl3;
 
    system("pause>>null");
}
0
0 / 0 / 0
Регистрация: 13.05.2014
Сообщений: 36
19.06.2014, 17:06  [ТС] 3
Плохо, если у нас будет сотня разных объектов - сотню ссылок в каждом элементе списка иметь - не хорошо. Да и много других проблем будет.
0
3240 / 2043 / 350
Регистрация: 24.11.2012
Сообщений: 4,898
19.06.2014, 17:54 4
Делайте классам общий базовый класс, держите в списке указатель на него...
0
26 / 26 / 9
Регистрация: 25.05.2009
Сообщений: 98
19.06.2014, 17:56 5
если честно, как это реализовать без "общего предка" - не очень представляю.
Через шаблоны? По идее, да, должно работать. (просто не пробовал делать хранилище под "совсем разные данные")
0
3240 / 2043 / 350
Регистрация: 24.11.2012
Сообщений: 4,898
19.06.2014, 17:57 6
Цитата Сообщение от Deiron Посмотреть сообщение
По идее, да, должно работать. (просто не пробовал делать хранилище под "совсем разные данные")
boost::variant
0
0 / 0 / 0
Регистрация: 13.05.2014
Сообщений: 36
19.06.2014, 17:59  [ТС] 7
Хммм... это хороший вариант спасибо. Можно как-то через шаблоны вроде... но не соображу как.
0
3334 / 2706 / 734
Регистрация: 25.03.2012
Сообщений: 9,797
Записей в блоге: 1
19.06.2014, 18:20 8
Insanus, а зачем может понадобиться список объектов, не имеющих абсолютно ничего общего? Не имеющих даже базового класса общего? Зачем? Ты их никак из этого списка не достанешь же!
0
26 / 26 / 9
Регистрация: 25.05.2009
Сообщений: 98
19.06.2014, 20:45 9
Лучший ответ Сообщение было отмечено Insanus как решение

Решение

возможно, имеется в виду "список произвольных элементов" (но в каждом списке все элементы однотипные).

Тогда пожалуйста:
C++
1
2
3
4
5
6
template< class T >
struct List
{
List * next;
T Data
};
насколько это работает со структурами - я фз. В классах такая запись:
C++
1
2
3
4
5
6
7
8
9
10
class List
{
private:
//....
List * next;
T Data
//...
public:
//...
};
А затем:
C++
1
List <тип> SomeVariable
работает.
0
0 / 0 / 0
Регистрация: 13.05.2014
Сообщений: 36
20.06.2014, 05:48  [ТС] 10
Таки сделал с общм базовым классом. Не думал, что, переопределив в дочернем классе, мы будем иметь возможность обратиться именно к переопределённой функции

Добавлено через 1 минуту
Так я и сделал, спасибо
0
26 / 26 / 9
Регистрация: 25.05.2009
Сообщений: 98
20.06.2014, 09:14 11
Ну, вообще то для этого и придумали "интерфейсы" (aka "абстрактные классы").

Я надеюсь, вы не забыли, что функция должны быть virtual, чтобы нормально вызывалось:
C++
1
2
3
Base *ptr;
//....
ptr->SomeFunction(); //реально вызовется функция наследника
0
0 / 0 / 0
Регистрация: 13.05.2014
Сообщений: 36
20.06.2014, 09:19  [ТС] 12
Deiron, я не знал, что вызываться будет переопределенная функция, вчера разобрался, спасибо
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.06.2014, 09:19

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Описать структуру с неким именем (например train), в которой есть указанные поля
Как описать структуру с неким именем (например TRAIN), в которой есть следующие поля: 1. Название...

Как можно реализовать такую структуру?
Реализовать структуру данных, которая имеет все те же операции, что массив длины n, а именно •...

Как прочитать такую структуру XML
Здравствуйте! как прочитать такую структуру на php &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;...

Как динамически сформировать такую структуру ?
Привет всем. На форуме не нашел ответа на свой вопрос, задаю его сам. При формировании...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.