Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Insanus
0 / 0 / 0
Регистрация: 13.05.2014
Сообщений: 36
#1

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

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

Суть вопроса в том, как создать структуру-список, поля которой - ссылка на сл. элемент(такую же структуру) и ссылка на объект, относящийся к любому из классов. Проще говоря - список из объектов, относящихся к разным классам.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.06.2014, 16:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как создать структуру-список, поля которой — ссылка на такую же структуру (C++):

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

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

Создать структуру, элементами которой являются фамилия студента и оценки - C++
Вроде бы и не особо сложное задание, но оно вызвало у меня проблемы, т.к. опыта в программировании у меня маловато... Немного посидел над...

Создать структуру с именем Train, содержащую следующие поля: - C++
Название пункта назначения; Номер поезда; Время отправления. Написать программу, выполняющую следующие действия: 1) Производить...

Создать структуру с именем STUDENT, содержащую следующие поля: - C++
Описать Структуру с именем STUDENT с полями 1. NAME-фамилия и инициалы; 2.GROUP-номер группы; 3.SES-успеваемость(массив из 5...

Создать структуру с именем Sportsmen и сформировать односвязный список - C++
Ребят,помогите пожалуйста,кто может - написать вот такую программу.... Создать структуру с именем Sportsmen с полями: фамилия, имя, вид...

11
Тамика
Котовчанин
912 / 455 / 145
Регистрация: 16.02.2010
Сообщений: 3,144
Записей в блоге: 27
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
Insanus
0 / 0 / 0
Регистрация: 13.05.2014
Сообщений: 36
19.06.2014, 17:06  [ТС] #3
Плохо, если у нас будет сотня разных объектов - сотню ссылок в каждом элементе списка иметь - не хорошо. Да и много других проблем будет.
0
0x10
2474 / 1647 / 247
Регистрация: 24.11.2012
Сообщений: 4,068
19.06.2014, 17:54 #4
Делайте классам общий базовый класс, держите в списке указатель на него...
0
Deiron
26 / 26 / 1
Регистрация: 25.05.2009
Сообщений: 98
19.06.2014, 17:56 #5
если честно, как это реализовать без "общего предка" - не очень представляю.
Через шаблоны? По идее, да, должно работать. (просто не пробовал делать хранилище под "совсем разные данные")
0
0x10
2474 / 1647 / 247
Регистрация: 24.11.2012
Сообщений: 4,068
19.06.2014, 17:57 #6
Цитата Сообщение от Deiron Посмотреть сообщение
По идее, да, должно работать. (просто не пробовал делать хранилище под "совсем разные данные")
boost::variant
0
Insanus
0 / 0 / 0
Регистрация: 13.05.2014
Сообщений: 36
19.06.2014, 17:59  [ТС] #7
Хммм... это хороший вариант спасибо. Можно как-то через шаблоны вроде... но не соображу как.
0
Kuzia domovenok
1892 / 1747 / 119
Регистрация: 25.03.2012
Сообщений: 5,936
Записей в блоге: 1
19.06.2014, 18:20 #8
Insanus, а зачем может понадобиться список объектов, не имеющих абсолютно ничего общего? Не имеющих даже базового класса общего? Зачем? Ты их никак из этого списка не достанешь же!
0
Deiron
26 / 26 / 1
Регистрация: 25.05.2009
Сообщений: 98
19.06.2014, 20:45 #9
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
возможно, имеется в виду "список произвольных элементов" (но в каждом списке все элементы однотипные).

Тогда пожалуйста:
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
Insanus
0 / 0 / 0
Регистрация: 13.05.2014
Сообщений: 36
20.06.2014, 05:48  [ТС] #10
Таки сделал с общм базовым классом. Не думал, что, переопределив в дочернем классе, мы будем иметь возможность обратиться именно к переопределённой функции

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

Я надеюсь, вы не забыли, что функция должны быть virtual, чтобы нормально вызывалось:
C++
1
2
3
Base *ptr;
//....
ptr->SomeFunction(); //реально вызовется функция наследника
0
Insanus
0 / 0 / 0
Регистрация: 13.05.2014
Сообщений: 36
20.06.2014, 09:19  [ТС] #12
Deiron, я не знал, что вызываться будет переопределенная функция, вчера разобрался, спасибо
0
20.06.2014, 09:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.06.2014, 09:19
Привет! Вот еще темы с ответами:

Как правильно написать функцию, которая редактирует структуру по полю Name и возвращает новую, исправленную структуру?.. - C++
Нужно отредактировать структуру по выбору пользователя. Проблема заключается в создании функции. Подскажите, а лучше покажите, как...

Для студентов 1 курсов - Курсовая (создать структуру, элементами которой являются фамилия студента и его возраст) - C++
Написать программу, в которой необходимо создать структуру, элементами которой являются фамилия студента и его возраст. Объявить массив...

Создать структуру данных о работнике, объединить несколько в список, отсортировав по зарплате - C++
создать структуру данных о работнике(номер,Ф.И.О.,зарплата ), объеденить несколько работников в список и вывести, отсортировав по зарплате

Как добавить текстовые поля в структуру - C++
Нужно добавить 2 поля и вывести их в дальнейшем, и считать транспорт и название страны я вроде-как добавил,но у меня вылетает не...


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

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

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