Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/25: Рейтинг темы: голосов - 25, средняя оценка - 4.76
тыжПрограммист
330 / 144 / 44
Регистрация: 21.04.2014
Сообщений: 638
1

Иерархия объектов и динамические списки внутри класса

07.01.2015, 15:38. Показов 4932. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
собственно есть задание
Иерархия объектов создается следующим образом (на примере ФАКУЛЬТЕТА): а) создается пустой ФАКУЛЬТЕТ, б) создается пустая КАФЕДРА, в) создаются ПРЕПОДАВАТЕЛИ и включаются в КАФЕДРУ, г) КАФЕДРА включается в ФАКУЛЬТЕТ, д) тоже повторяется для другой кафедры, е) создается пустая СТУДЕНЧЕСКАЯ ГРУППА, ж) создаются СТУДЕНТЫ и включаются в СТУДЕНЧЕСКУЮ ГРУППУ, з) СТУДЕНЧЕСКАЯ ГРУППА включается в ФАКУЛЬТЕТ, и) тоже повторяется для другой студенческой группы.
Я вроде как понимаю задание но и не понимаю). Решил написать сюда.
План действий.

1. Создаю абстрактный класс Университет
2. От класса Университет наследуется класс Факультет(содержащий в себе динамический список Факультетов)
3. От класса Факультет наследуется класс Кафедра(содержащий в себе динамический список Кафедр)
4. От класса Кафедра наследуется класс Преподаватели (содержащий в себе динамический список Преподавателей)
5. От класса Факультет наследуется класс СтудГруппа(содержащий в себе динамический список СтудГрупп)
6. От класса СтудГруппа наследуется класс Студент(содержащий в себе динамический список Студентов)

Если я в чём-то не прав - напишите. Может можно как-то проще сделать).

И теперь самые главные вопросы.

Как создать динамический список внутри класса НЕ ИСПОЛЬЗУЯ STL-контейнеры?

Что такое динамические списки и как с ними работать - знаю..но только вне класса..
Если взять для примера класс студент,то получается так:

C++
1
2
3
4
Student* [U]STUDENTGROUP1[/U] = new Student();
new Student(name);
new Student(name1);
new Student(name2);
Ну с другой стороны..если я создам ещё 1 объект
C++
1
Student* [U]STUDENTGROUP2[/U] = new Student();
то как мне потом добавить в него студентов?

и как потом мне объекты STUDENTGROUP1 STUDENTGROUP2 добавить в динамический список СтудГрупп. Пока писал тут..снова запутался..как эти иерархии составлять

В общем если кто-то понял данный текст укажите на ошибки и в правильном ли направлении мои извилины шевелятся?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.01.2015, 15:38
Ответы с готовыми решениями:

Массив разных объектов внутри класса
Хочу сделать что-то типа системы событий и их обработчиков. Есть класс Window и класс Control, от...

Иерархия классов , списки
Добрый день. Есть три класса , Stud, Group из студентов , и Facultet из групп. Пытаюсь решить...

Иерархия геометрических объектов
Иерархия геометрических объектов наследием: класс точка -> класс треугольник -> класс квадрат ->...

Комопзиция объектов/иерархия классов
в общем нигде не могу найти внятного объяснения в виде кода, все очень поверхностно везде...

17
7795 / 6561 / 2985
Регистрация: 14.04.2014
Сообщений: 28,682
07.01.2015, 17:48 2
А здесь вообще нужна иерархия в смысле ООП? Классы просто содержат списки других классов. Это не наследование. Похоже на описание БД.
0
тыжПрограммист
330 / 144 / 44
Регистрация: 21.04.2014
Сообщений: 638
07.01.2015, 17:59  [ТС] 3
Цитата Сообщение от nmcf Посмотреть сообщение
А здесь вообще нужна иерархия в смысле ООП? Классы просто содержат списки других классов. Это не наследование. Похоже на описание БД.
Может..я просто не правильно понял
Вот само задание...я чуть сократил у себя
Иерархия объектов и динамические списки внутри класса
0
7795 / 6561 / 2985
Регистрация: 14.04.2014
Сообщений: 28,682
07.01.2015, 19:58 4
Ну вот с картинки и надо было начать. Первая схема показывает иерархию. Так и описывай.
0
тыжПрограммист
330 / 144 / 44
Регистрация: 21.04.2014
Сообщений: 638
07.01.2015, 20:02  [ТС] 5
Абстрактная группа в c++ это что?..как это реализовывается?
0
7795 / 6561 / 2985
Регистрация: 14.04.2014
Сообщений: 28,682
07.01.2015, 20:29 6
Наверное, имеется в виду абстрактный класс, который содержит список элементов Персона.
1
тыжПрограммист
330 / 144 / 44
Регистрация: 21.04.2014
Сообщений: 638
07.01.2015, 20:43  [ТС] 7
Цитата Сообщение от nmcf Посмотреть сообщение
Наверное, имеется в виду абстрактный класс, который содержит список элементов Персона.
Да. Спасибо. Вроде как сдвинулся с места. Теперь другая проблема. Как реализовать динамический список внутри класса..Я сделал так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Base
{
public:
    Base* head = NULL;
    Base* next = NULL;
    Base* getnext();
    void setnext(Base*);
    int x;
    Base(int);
    Base();
    ~Base();
    void add();
    void show();
};
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
#include "stdafx.h"
#include "Base.h"
 
Base* Base::getnext()
{
    return next;
}
 
void Base::setnext(Base * NEXT)
{
    next = NEXT;
}
 
void Base::show()
{
    Base *tmp = head;
 
    while (tmp != NULL)
    {
        cout << "AZZAAZ" << endl;
        cout << tmp->x << endl;
        tmp = tmp->getnext();
 
    }
 
}
 
void Base::add()
{
    Base *tmp = head;
 
    if (head == NULL)
    {
        head = this;
        next = NULL;
    }
    else
    {
        while (tmp->getnext() != NULL)
            tmp = tmp->getnext();
        tmp->setnext(this);
 
    }
 
}
 
 
Base::Base(int X)
{
    x = X;
    add();
}
C++
1
2
3
4
5
6
7
8
9
10
int _tmain(int argc, _TCHAR* argv[])
{
    Base * BASE = new Base();
    BASE = new Base(1);
    BASE = new Base(2);
    BASE = new Base(3);
 
    BASE->show();
    return 0;
}
Но выводит 1 элемент а не 3.

Выход есть - статический HEAD. Но тогда пропадает возможность создания нескольких объектов данного типа. Так как HEAD везде будет одинаковым. Можете подсказать решение проблемы?
0
7795 / 6561 / 2985
Регистрация: 14.04.2014
Сообщений: 28,682
07.01.2015, 21:00 8
Список предполагает только head, зачем тебе next? Может проще STL использовать?
И список нужен именно в традиционном понимании или достаточно массива?
0
тыжПрограммист
330 / 144 / 44
Регистрация: 21.04.2014
Сообщений: 638
07.01.2015, 21:05  [ТС] 9
Цитата Сообщение от nmcf Посмотреть сообщение
Список предполагает только head, зачем тебе next? Может проще STL использовать?
И список нужен именно в традиционном понимании или достаточно массива?
В традиционном понимании).

Я бы с радостью и STL использовал. Но преподаватель попросил сделать в традиционном понимании.

зачем тебе next?
ну вроде как "указатель на следующий элемент" списка.

Сколько помню и на C и на паскале так писал)...Может я чего упустил
0
7795 / 6561 / 2985
Регистрация: 14.04.2014
Сообщений: 28,682
07.01.2015, 21:29 10
Хранится только head. Ну иногда ещё tail. А всё остальное получается просмотром. Я имею в ввиду, что в самом классе next не нужен, только внутри функций, если алгоритм требует.
0
тыжПрограммист
330 / 144 / 44
Регистрация: 21.04.2014
Сообщений: 638
07.01.2015, 21:34  [ТС] 11
Цитата Сообщение от nmcf Посмотреть сообщение
Хранится только head. Ну иногда ещё tail. А всё остальное получается просмотром. Я имею в ввиду, что в самом классе next не нужен, только внутри функций, если алгоритм требует.
а,вы это имели ввиду. Ну,да.
В любом случае как можно пофиксить проблему с созданием нового объекта данного типа?

Я так понимаю..нужно при создании первого элемента держать где-то указатель на голову..И внутри класса это неподходящий вариант.
0
7795 / 6561 / 2985
Регистрация: 14.04.2014
Сообщений: 28,682
07.01.2015, 21:37 12
head - член класса, все остальные вспомогательные переменные в соответствующих функциях.
0
тыжПрограммист
330 / 144 / 44
Регистрация: 21.04.2014
Сообщений: 638
07.01.2015, 21:46  [ТС] 13
Цитата Сообщение от nmcf Посмотреть сообщение
head - член класса, все остальные вспомогательные переменные в соответствующих функциях.
я вам рыбу - вы мне мясо..или я тупой..другого не дано).
то что head член класса это ясно.

Проблема в том что если я создам объект типа Base
и добавлю туда несколько данных
C++
1
2
3
4
    Base * BASE = new Base();
    BASE = new Base(1);
    BASE = new Base(2);
    BASE = new Base(3);
то указатель на head - затерётся последним элементом и при попытке вывода данного списка..я получу только один - последний добавленный в список элемент..

если сделать указатель head статическим то во всех объектах он будет одинаковым..тобишь если я опять
C++
1
2
3
4
    Base * BASE = new Base();
    BASE = new Base(1);
    BASE = new Base(2);
    BASE = new Base(3);
и вы выведу их на экран - выведет все 3. Но возникает проблема. Если я создам ещё один объект такого типа ну с другим названием..например так:
C++
1
2
3
4
    Base * BASE1 = new Base();
    BASE1 = new Base(1);
    BASE1 = new Base(2);
    BASE1 = new Base(3);
то указатель на голову списка будет равен указателю из BASE::head - что недопустимо для 2 разных динамических списков.

Поэтому я ищу метод создания двух НЕЗАВИСИМЫХ динамических списков.
А держать кучу переменных вне классов - не удобно..Вот я и подумал что возможно есть какое-нибудь элегантное решение проблемы.
0
7795 / 6561 / 2985
Регистрация: 14.04.2014
Сообщений: 28,682
07.01.2015, 22:03 14
А, я понял. Ну тогда надо предусмотреть next уже в Tobject, как указатель на следующий элемент в цепочке.

Добавлено через 25 секунд
Либо какую-то структуру придумывать.
0
0 / 0 / 0
Регистрация: 27.03.2017
Сообщений: 5
03.04.2017, 14:29 15
LonerZzz, можешь пожалуйста кинуть весь код вот этого задания мне
Иерархия объектов создается следующим образом (на примере ФАКУЛЬТЕТА): а) создается пустой ФАКУЛЬТЕТ, б) создается пустая КАФЕДРА, в) создаются ПРЕПОДАВАТЕЛИ и включаются в КАФЕДРУ, г) КАФЕДРА включается в ФАКУЛЬТЕТ, д) тоже повторяется для другой кафедры, е) создается пустая СТУДЕНЧЕСКАЯ ГРУППА, ж) создаются СТУДЕНТЫ и включаются в СТУДЕНЧЕСКУЮ ГРУППУ, з) СТУДЕНЧЕСКАЯ ГРУППА включается в ФАКУЛЬТЕТ, и) тоже повторяется для другой студенческой группы.
0
тыжПрограммист
330 / 144 / 44
Регистрация: 21.04.2014
Сообщений: 638
03.04.2017, 19:21  [ТС] 16
Это было так давно..Я ещё и ООП тогда не знал..
Тот код уже давным давно в помойке...И для примера он едва ли годился
1
0 / 0 / 0
Регистрация: 27.03.2017
Сообщений: 5
03.04.2017, 21:24 17
Я поняла, а сейчас уже разбираешься в ООП хорошо??
0
тыжПрограммист
330 / 144 / 44
Регистрация: 21.04.2014
Сообщений: 638
04.04.2017, 14:06  [ТС] 18
Цитата Сообщение от Елоночка Посмотреть сообщение
Я поняла, а сейчас уже разбираешься в ООП хорошо??
Ну за два года конечно можно было разобраться))
0
04.04.2017, 14:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.04.2017, 14:06
Помогаю со студенческими работами здесь

Иерархия объектов. Привязывание/отвязывание узлов
Доброго времени суток, Господа. Возникла проблема, в решении которой, никак не могу разобраться. ...

Иерархия объектов для battle city
Пишу игру Танчики ООП на С++. для начала стоит задача создать иерархию объектов а потом уже и...

Динамические списки
Всем привет. Подскажите пожалуста идеи. Дано стек, разработать функцию, которая формирует два новых...

Динамические списки
Пишу курсовую работу про динамические списки, и хотелось узнать мнение специалистов про мою функцию...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru