Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
Anton-KRaV
1 / 1 / 1
Регистрация: 28.07.2013
Сообщений: 41
1

Структура программы или наследование, без использования конструктора базового класса

16.05.2015, 19:57. Просмотров 1034. Ответов 15
Метки нет (Все метки)

Всем доброго времени суток.

Снова прошу вас о помощи!
Код располагается по ссылке в спойлере - не вставлю сюда, так как слишком длинный для форума ИМХО.
Как говорится - писал, писал, а мозги включить забыл.
Программа работает по принципу создания объекта Table, затем Hand. Все идет хорошо до конца жизни Hand. После его уничтожения, мне нужно создание нового объекта Hand, БЕЗ уничтожение Table и создания нового. Но как это реализовать - не знаю. Уже понял что структура программы плохая, и т. д. - не судите строго, я начинающий, и уж что то очень непросто дается освоение ООП.

Кликните здесь для просмотра всего текста


Вопрос: как сохранять Table живым независимо от количество Hand в нем?

Заранее благодарю!!!

Добавлено через 2 часа 36 минут
Кажется, начинаю осозновать ошибку. Hand следовало сделать не производным классом, а включением, верно?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.05.2015, 19:57
Ответы с готовыми решениями:

Наследование конструктора из базового класса
#include "stdafx.h" #include <iostream> #include <cstring> using namespace...

Вызвать конструктор производного класса без конструктора базового класса
Здравствуйте! У меня есть базовый класс треугольник и производный класс...

Std::vector добавить новый элемент собственного класса без использования конструктора копирования
Всем привет! Есть один класс, который я хочу хранить в std::vector. Создать...

Вызов конструктора базового класса из класса-наследника
Можно ли вне списка инициализации вызвать конструктор базового класса ? ...

Вызов конструктора базового класса
Здравствуйте! Я вот начал изучать C# и немножечко освежил ООП. Но вот у меня...

15
Nosey
1376 / 403 / 144
Регистрация: 22.10.2014
Сообщений: 872
Завершенные тесты: 2
16.05.2015, 20:40 2
Anton-KRaV,
А почему вы не сделали Hand полем Player?
Этож самое логичное, жизненное решение )
0
Anton-KRaV
1 / 1 / 1
Регистрация: 28.07.2013
Сообщений: 41
17.05.2015, 08:40  [ТС] 3
Често? Я незнаю как я это то написал
А если серьезнее, то не совсем понял идею. Класс Hand - единичная раздача в игре, то есть вот, чего я хотел получить:
- создание Table
- создание Hand
- удаление Hand
- . . . (Неопределенное количество итераций)
- удаление Table

А на практике имею создание нового Table при создании Hand, так как он его наследник.
По вашему предложению не совсем понял, сделать класс Hand, отвечающий за единичную раздачу объектом класса Player?
А в чем выгода?
Заранее благодарю!
0
Nosey
1376 / 403 / 144
Регистрация: 22.10.2014
Сообщений: 872
Завершенные тесты: 2
17.05.2015, 09:16 4
Сделайте как в жизни)))
Table - за ним сидит n Player'ов, у каждого игрока есть Hand.

Игровой контроллер примерно такой:
- Контроллер получает линк на Table. И далее уже
- создание Hand
- удаление Hand
.... для каждого игрока.

Player - name, и другая статистика.
Hand - коллекция карт + всякие штуки для оценки карт если требуются, да и отдельные алгоритмы работающие с Hand'ами.

Ну и в общем, все эти сущности - очень разные, наследование среди них совершенно лишняя штука.
1
Anton-KRaV
1 / 1 / 1
Регистрация: 28.07.2013
Сообщений: 41
17.05.2015, 10:14  [ТС] 5
Благодарю вас за быстрый ответ!
Единственное что смущает - одна игра (раздача карт на всех игроков, принятие ставок, раздача карт на стол, и т. п.) это все хотел реализовать в классе Hand. Данный класс - не карты на руках игроков, за это отвечает Player::vector<Card> hand. То есть класс Hand на всех игроков один должен быть, я правильно понимаю?
P.S. Вы меня уж простите, я запутался окончательно, даже диаграмму UML не смог составить
0
Nosey
1376 / 403 / 144
Регистрация: 22.10.2014
Сообщений: 872
Завершенные тесты: 2
17.05.2015, 12:09 6
Цитата Сообщение от Anton-KRaV Посмотреть сообщение
Единственное что смущает - одна игра (раздача карт на всех игроков, принятие ставок, раздача карт на стол, и т. п.) это все хотел реализовать в классе Hand.
Разделите поведении и данные, вам будет намного легче.
Данные могут уметь возвращать какую-то хитрую статистику( аля вес карт на руке, остаточный вес в колоде и т.д.)
А перемещение карт колода-рука-отбой - это в отдельном классе игры, и не одном.

Соответственно если это что-то типа префа, где требуется статистика между играми - то не скромничайте, заводите ещё одну сущность аля PlayerGameData.
1
Anton-KRaV
1 / 1 / 1
Регистрация: 28.07.2013
Сообщений: 41
17.05.2015, 13:33  [ТС] 7
Блин, я все равно не могу понять, как правильней составит структуру, хотя бы для минимальной функциональности...
Я приложил мини диаграмму UML, что добавить нужно, помогите пожалуйста разработать грамотную структуру программу дереву...
0
Изображения
 
kol
23 / 9 / 5
Регистрация: 30.01.2015
Сообщений: 175
17.05.2015, 13:43 8
Сначала создается конструктор базового класса. Конструктор производного класса должен передавать информацию базового класса через список инициализаторов членов.
Во время создания объекта производного класса программа сначала вызывает конструктор базового класса, а потом конструктор производного, деструкторы вызываются в обратном порядке.
1
Anton-KRaV
1 / 1 / 1
Регистрация: 28.07.2013
Сообщений: 41
17.05.2015, 13:49  [ТС] 9
Благодарю вас, но решил использовать включение вместо наследования!
P.S. тема названа некорректно, но, видимо, переименовать уже невозможно
0
Anton-KRaV
1 / 1 / 1
Регистрация: 28.07.2013
Сообщений: 41
17.05.2015, 16:55  [ТС] 10
Прошу прощения, выложил диаграмму с ошибками( Исправляюсь.
Подскажите, как правильно разрабатывать структуру программы?
0
Миниатюры
Структура программы или наследование, без использования конструктора базового класса  
Nosey
1376 / 403 / 144
Регистрация: 22.10.2014
Сообщений: 872
Завершенные тесты: 2
17.05.2015, 18:00 11
Anton-KRaV, Я тут вас запутал несколько, незамечая, что hand у вас, это и есть поведенческая штука.
У вас всё нормально с архитектурой, разве что несколько запутались вы.

Я бы в вашем случае, создавал Table отдельно от Hand и соттветственно передавал бы "ссылку". Ведь стол может существовать и до того как игроки будут играть, они могут просто сидеть ))))
0
Anton-KRaV
1 / 1 / 1
Регистрация: 28.07.2013
Сообщений: 41
17.05.2015, 18:18  [ТС] 12
Идею понял, может стол создать отдельно от Player? Стол может быть готов к игре тоже без игроков, так ведь?
Благодарю за терпение!
0
Nosey
1376 / 403 / 144
Регистрация: 22.10.2014
Сообщений: 872
Завершенные тесты: 2
17.05.2015, 18:26 13
Лучший ответ Сообщение было отмечено Anton-KRaV как решение

Решение

Anton-KRaV, Если это не сингл игра, то конечно отдельно.
Потом если вдруг окажется что создавать их нужно чаще чем хотелось бы воспользуйтесь услугами "строителя" и/или "фасада".(ну например ваша игра станет миниигрой встроенной в ММО )
1
Anton-KRaV
1 / 1 / 1
Регистрация: 28.07.2013
Сообщений: 41
17.05.2015, 18:46  [ТС] 14
Nosey, огромное вам спасибо!
Буду пробовать реализовать с чистого листа))
Осталось три маленьких вопроса:
1. Какой связью лучше установить взаимоотношение между классами игрока и стола, и стола и раздачи? Включение, композиция или какой то другой?
2. Мои классы карт и игрока оставить классами или переделать в структуры? То ли Шилдт, то ли Лафоре писал, что такие структуры для хранения данных лучше описывать как struct...
3. Можно попросить вас ссылку про "строителя" и "фасад"? Впервые слышу о таком, а беглый поиск в инете не дал ожидаемых результатов...
Еще раз благодарю!
0
Nosey
1376 / 403 / 144
Регистрация: 22.10.2014
Сообщений: 872
Завершенные тесты: 2
17.05.2015, 19:02 15
Цитата Сообщение от Anton-KRaV Посмотреть сообщение
Какой связью лучше установить взаимоотношение между классами игрока и стола, и стола и раздачи? Включение, композиция или какой то другой?
Ой, я не мастер, таких красивых терминов . Могу лишь по своему сказать, что я за невладеющее "взаимодействие".

Цитата Сообщение от Anton-KRaV Посмотреть сообщение
Мои классы карт и игрока оставить классами или переделать в структуры? То ли Шилдт, то ли Лафоре писал, что такие структуры для хранения данных лучше описывать как struct...
Тут кому как удобно, кто как привык, я дитя С++ и пратически всегда пишу классы.

Цитата Сообщение от Anton-KRaV Посмотреть сообщение
Можно попросить вас ссылку про "строителя" и "фасад"? Впервые слышу о таком, а беглый поиск в инете не дал ожидаемых результатов...
https://ru.wikipedia.org/wiki/%D0%A8...BD%D0%B8%D1%8F
https://ru.wikipedia.org/wiki/Design_Patterns
0
Anton-KRaV
1 / 1 / 1
Регистрация: 28.07.2013
Сообщений: 41
17.05.2015, 19:22  [ТС] 16
Святой вы человек!
Спасибо!
0
17.05.2015, 19:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.05.2015, 19:22

Инициализация конструктора базового класса
class animal { public: animal(int a):ianimal(a){} protected: int...

Вызов конструктора базового класса из порожденного
Есть Базовый класс студент: имеет поля: фамилия, адрес, тел., возраст. ...

Использование конструктора базового класса наследником
Доброго дня, коллеги! Решал одну задачку и столкнулся с проблемой. По условию...


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

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

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