45 / 21 / 6
Регистрация: 28.02.2013
Сообщений: 194
|
||||||
1 | ||||||
Никогда не использовать конструктор с параметрами?05.03.2013, 10:52. Показов 2117. Ответов 31
Метки нет (Все метки)
Если я захочу чтоб в одном классе был вложен другой класс
Не по теме: например есть класс "бумажник" То обнаружу что я не могу передать его конструктору параметры. а могу лишь написать:
Если же я захочу написать функцию типа c_Chelovek::AddBumaznik(int dengi); и в ней вызвать конструктор бумажника с параметрами - то ничего ни выходит. Типа обьект уже создан. Отсюда делаю далеко идущие выводы. Вот пишу я класс. Возможно когда то я или кто то захочет использовать его экземпляр внутри своего класса. тогда у меня один правильный выход: -писать конструктор без параметров -писать функцию класса Init(params); //Функцию инициализации класса с параметрами Я чтото упустил из виду? Добавлено через 12 минут Или же так не делают. А надо по хитрому. - заводить переменную - указатель на обьект "бумажник" - в функции c_Chelovek::AddBumaznik(int dengi) выделять оператором new новый экземпляр класса "бумажник" при этом ему можно сообщать параметры конструктора и в переменную(указатель) писать адресс вновь созданого обьекта и с ним потом както работать
0
|
05.03.2013, 10:52 | |
Ответы с готовыми решениями:
31
Определить конструктор без параметров, конструктор с одним параметром, конструктор с двумя параметрами, деструктор Создать класс. Написать конструктор по умолчанию, конструктор с параметрами. Перегрузить операции «меньше» и «равно» Конструктор с параметрами И конструктор по умолчанию. Как? Можно ли использовать конструктор по умолчанию и конструктор инициализации одновременно? |
Неэпический
|
||||||
05.03.2013, 10:56 | 2 | |||||
Список инициализации?
0
|
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
|
|
05.03.2013, 10:57 | 3 |
Упустил.
Не по теме: Мне кажется довольно нелепой ситуация, когда Человек "рождается" уже с Бумажником... :-) Но не буду обсуждать концепцию. Решений есть несколько: 1. Конструктор по умолчанию класса Человек может либо инициализировать Бумажник некоторой суммой денег по умолчанию, либо создавать пустой Бумажник. В последнем случае, классу Человек целесообразно иметь метод ДобавитьДенегВБумажник(сумма) - обрати внимание, не ДобавитьНовыйБумажник! 2. Класс Человек может иметь несколько Бумажников (вектор Бумажников). И добавлять/удалять Бумажники по потребности. 3. Наконец, класс Человек может иметь указатель на Бумажник. Этот указатель по умолчанию может указывать в NULL - т.е. по умолчанию Человек нищий :-) А затем Человек может присваивать себе указатели на чужие Бумажники, в том числе - и не один :-))) В общем, пиши тестовый код.... поглядим. Сложного-то ничего нет. Просто нужно прежде всего правильно сформулировать, какого именно поведения своих классов ты хочешь добиться.
2
|
45 / 21 / 6
Регистрация: 28.02.2013
Сообщений: 194
|
|
05.03.2013, 10:58 [ТС] | 4 |
если у меня класс A содержит 'экземпляры классов B и С и D?
0
|
177 / 163 / 21
Регистрация: 12.02.2013
Сообщений: 410
|
|
05.03.2013, 11:01 | 6 |
Упустил.
Моделирование человека со вложенным бумажником - не вполне корректно, это раз. Отсюда твоя проблема. Вложенные класса создаются в порядке их объявления внутри класса, а значит их конструктор вызывается при создании класса, их содержащего. Конструктор ты явно вызвать не можешь, потому у тебя следующие варианты: 1. сделать для бумажника конструктор с параметром и создавать человека, указывая для него, сколько у него денег (посредством передачи конструктору человека нужной цифры и дальнейшей её передачи конструктору с параметром бумажника.) 2. создавать человека с пустым бумажником, и завести функцию, которая будет (наделять его лавэ) 3. изменить модель. Впрочем, вполне нормальная ситуация, когда ты создаешь человека с пустым бумажником и делаешь для него функу, например, положить в бумажник n лавэ. Это вполне отражает реальную ситуацию. Конструктор же по умолчанию для бумажника, который содержит, полагаю, какое-то поле, логично было бы написать и инициализировать это поле нулём. Но повторяю, твоя модель подразумевает, что у каждого человека обязательно есть бумажник, как неотъемлемый атрибут. Если в контексте решаемой задачи это нормально, тока в путь Ответы на далеко идущие выводы. Ну вообще, когда ты пишешь класс, ты обязан реализовать в нем интерфейс самодостаточный для использования его тобой/кем бы то ни было. Потому да, как бы ни был создан экземпляр, он должен быть инициализирован нормальными значениями и работоспособен. Другое дело, что едва ли твой кошелек может сам себя наполнять n-й суммой))) И конечно, твой класс должен предоставлять (как правило) set-, get-методы для пользователей. Надеюсь, нужное написал, если чо, спрашивай. Пока катал - стока ответов уже)))))
0
|
45 / 21 / 6
Регистрация: 28.02.2013
Сообщений: 194
|
|
05.03.2013, 11:39 [ТС] | 7 |
Вот в том то и дело. Я пишу класс "бумажник".
- я не знаю кто и как захочет потом этот класс использовать - я пишу чтото в надежде написать. Тоесть надеюсь что написав один раз файлы bumaznik.h и bumaznik.cpp никогда не открою bumaznik.cpp даже для чтения и просто включу bumaznik.h инклудом в файл где буду использовать этот класс - я не хочу писать лишний код (это как минимум не логично) Тогда у меня 2 выбора: - делать конструктор без параметров и функцию Init(params) (В часном случае ДобавитьДеньги(деньги) ) - заставить програмиста работать через указатели с моим классом в случае если он захочет его включить в свой Добавлено через 1 минуту ладно, параметр деньги неудачный пример. Давайте использовать параметр "цвет" бумажник же рождается с цветом Добавлено через 1 минуту И человек не рождается с бумажником, но у него ведь может быть функция ПошитьСебеБумажник(цвет) типа такого Добавлено через 23 минуты Впрочем если принять за аксиому что Работать не с обьектами а с сылками на них - это просто и естественно то никаких противоречий нет в использовании конструкторов с параметрами.
0
|
Неэпический
|
|
05.03.2013, 11:46 | 8 |
ЗАЧЕМ???
Вы вообще понимаете зачем нужен конструктор или нет??? Если кому-то нужно будет создать объект с параметрами не по умолчанию - создадут с вызовом соответствующего конструктора, если он конечно есть.
0
|
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
|
|
05.03.2013, 11:56 | 9 |
nefton, начни с простой штуки: опиши назначение твоего класса-Бумажника и основные сценарии использования (use cases) этого Бумажника. Отсюда будет ясен интерфейс твоего класса-Бумажника.
А то пока ты конструируешь сферический Бумажник в вакууме :-)
0
|
45 / 21 / 6
Регистрация: 28.02.2013
Сообщений: 194
|
|
05.03.2013, 12:15 [ТС] | 10 |
Код
класс бумажник { конструктор бумажник(цвет); void ВзятьДеньги(деньги); void ПоложитьДеньги(деньги); цвет ПосмотретьЦвет(); } класс Человек { конструктор Человек(рост, вес); void СделатьСебеБумажник(цвет); цвет ПосмотретьЦветБумажника(); бумажник мой_бумажник; //либо бумажник* мой_указатель_на_бумажник; } Человек::СделатьСебеБумажник(цвет){ //невозможно! //Хотя вроде класс бумажник вполне логичен и самодостаточен... был //идём дописывать в бумажник конструктор по умолчанию и странную функцию ДобавитьЦвет(цвет) } // вариант если мы обьявили мой_указатель_на_бумажник Человек::СделатьСебеБумажник(цвет){ мой_указатель_на_бумажник = new бумажник(цвет); } цвет Человек::ПосмотретьЦветБумажника(){ return мой_указатель_на_бумажник->ПосмотретьЦвет(); } Но походу надо привыкать что переменная мой_указатель_на_бумажник - это нормально
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
05.03.2013, 12:34 | 12 | |||||
Кривовато, но хотя бы логично.
0
|
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
|
||||||
05.03.2013, 12:37 | 14 | |||||
nefton, весь описанный тобою интерфейс легко конструируется:
(код сильно упрощенный, но собирается)
0
|
45 / 21 / 6
Регистрация: 28.02.2013
Сообщений: 194
|
||||||
05.03.2013, 12:44 [ТС] | 16 | |||||
error C2512: 'bumaznik' : no appropriate default constructor available
0
|
45 / 21 / 6
Регистрация: 28.02.2013
Сообщений: 194
|
|
05.03.2013, 12:47 [ТС] | 18 |
разве? спроси у прохожего какой цвет его бумажника по умолчанию
Да и во что превратится конструктор человека если у него не только бумажник, а и блокнот, портфель, карманы, и ещё пол сотни обьектов
0
|
05.03.2013, 12:51 | 19 |
бред. Просто скажи, что ты хочешь от человека? Чтобы он принимал в своём конструкторе цвет бумажника или, чтобы его бумажник по умолчанию имел color=0 ???
Третьего не дано. Всё потому, что его бумажник всегда создаётся одновременно с человеком.
0
|
05.03.2013, 12:55 | 20 |
а зачем их хранить в человеке по значению??? Храни тогда указатели на них. Ты изначально спрашивал о классе "человек" с полем "бумажник"
0
|
05.03.2013, 12:55 | |
05.03.2013, 12:55 | |
Помогаю со студенческими работами здесь
20
Конструктор с параметрами Конструктор (с параметрами) Конструктор с параметрами Конструктор с параметрами Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |