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

Никогда не использовать конструктор с параметрами? - C++

Восстановить пароль Регистрация
 
 
nefton
44 / 20 / 5
Регистрация: 28.02.2013
Сообщений: 184
05.03.2013, 10:52     Никогда не использовать конструктор с параметрами? #1
Если я захочу чтоб в одном классе был вложен другой класс

Не по теме:

например есть класс "бумажник"
а класс "человек" среди своих данных содержит экземпляр класса "бумажник"


То обнаружу что я не могу передать его конструктору параметры.
а могу лишь написать:
C++
1
2
3
4
5
6
class c_Chelovek {
 
public:
    c_Chelovek();
    c_Bumaznik bumaznik;
}
При этом вызовется именно конструктор c_Bumaznik() без параметров.

Если же я захочу написать функцию типа c_Chelovek::AddBumaznik(int dengi);
и в ней вызвать конструктор бумажника с параметрами - то ничего ни выходит.
Типа обьект уже создан.

Отсюда делаю далеко идущие выводы.
Вот пишу я класс. Возможно когда то я или кто то захочет использовать его экземпляр внутри своего класса.
тогда у меня один правильный выход:
-писать конструктор без параметров
-писать функцию класса Init(params); //Функцию инициализации класса с параметрами

Я чтото упустил из виду?

Добавлено через 12 минут
Или же так не делают. А надо по хитрому.
- заводить переменную - указатель на обьект "бумажник"
- в функции c_Chelovek::AddBumaznik(int dengi) выделять оператором new новый экземпляр класса "бумажник"
при этом ему можно сообщать параметры конструктора
и в переменную(указатель) писать адресс вновь созданого обьекта
и с ним потом както работать
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
05.03.2013, 12:55     Никогда не использовать конструктор с параметрами? #21
Цитата Сообщение от nefton Посмотреть сообщение
Да и во что превратится конструктор человека если у него не только бумажник, а и блокнот, портфель, карманы, и ещё пол сотни обьектов
а зачем их хранить в человеке по значению??? Храни тогда указатели на них. Ты изначально спрашивал о классе "человек" с полем "бумажник"
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
05.03.2013, 12:56     Никогда не использовать конструктор с параметрами? #22
Не несите ерунды. Ваша задача сделать класс бумажник, этим и занимайтесь. Делайте его интерфейс максимально эффективным. А то, как Ваш класс будет использоваться Вас никак не должно касаться. Вы сделали свой кирпич(класс) и он будет использован при строительстве дома(программы). А в каком месте он будет и каким боком, Вас касаться не должно.
ITcrusader
Эксперт C++
 Аватар для ITcrusader
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
05.03.2013, 13:00     Никогда не использовать конструктор с параметрами? #23
Цитата Сообщение от nefton Посмотреть сообщение
Вот в том то и дело. Я пишу класс "бумажник".
Судя по тому, что ты озвучиваешь, ты хочешь обеспечить повторное использование бумажника вне зависимости от контекста и задачи однажды кем-либо. НО. Ты никогда не напишешь абсолютно универсальный класс, который подошел бы всем. Да это и не требуется, см. "минимальность и полнота" интерфейса класса (Мейерс, например).

Далее. Если однажды бумажник не удовлетворит запросу - есть наследование и агрегация, как механизмы повторного использования кода при создании новых классов, закрытое наследования, наконец.

Цитата Сообщение от nefton Посмотреть сообщение
вся проблема в том что для меня как обычного человека естественнее использовать в программе бумажник, а не указатель на него
А в начальной задумке ты сконструировал человека, который физически состоит из бумажника и еще чего-то - тоже не похоже на правду. Указатель поможет тебе определить модель не "состоит из", а реализует концепцию "использования". Есть внешний бумажник, есть человек, есть связь и связь - динамическая.
nefton
44 / 20 / 5
Регистрация: 28.02.2013
Сообщений: 184
05.03.2013, 13:04  [ТС]     Никогда не использовать конструктор с параметрами? #24
Та я уже понял что самое лучшее из возможных вариантов - работать с указателями на обьекты.
и не придумывать как обойти это типа функции Init() или тем более цвет по умолчанию
ITcrusader
Эксперт C++
 Аватар для ITcrusader
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
05.03.2013, 13:06     Никогда не использовать конструктор с параметрами? #25
nefton, Сорри, я уже, наверное, обсужденные вещи накатал. (прост с английского на рабочее место вернулся и не увидел, что тут уже 3 страницы, ответил на первые сообщения)
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,309
05.03.2013, 13:15     Никогда не использовать конструктор с параметрами? #26
Цитата Сообщение от nefton Посмотреть сообщение
разве? спроси у прохожего какой цвет его бумажника по умолчанию
Да и во что превратится конструктор человека если у него не только бумажник, а и блокнот, портфель, карманы, и ещё пол сотни обьектов
Стоп! Ты конструируешь класс Бумажник. Поэтому тебя должны волновать только его правильная работа и непротиворечивость. Уж как там будет совершенно посторонний Человек использовать твой Бумажник - не твоя забота. И при конструировании Бумажника тебя не должны волновать Блокнот, Портфель и прочие объекты, - пусть их будет хоть миллион. Об их хранении и взаимодействии пусть думает тот, кто будет разрабатывать Человека. (The Lord? :-) )

Короче, тут у тебя "смешались в кучу кони, люди...." А надо - разделяй и властвуй!
ITcrusader
Эксперт C++
 Аватар для ITcrusader
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
05.03.2013, 13:17     Никогда не использовать конструктор с параметрами? #27
По-хорошему, так вообще можно декларировать человека как френд для бумажника, чтобы тот проверял состояние его самостоятельно. Потому как бумажник - лишь обертка для хранения денег/карт и едва ли объект класса бумажник должен отвечать на запрос кол-ва денег. Это больше походит на реальное поведение, но делает класс бумажника не особо универсальным, потому как теперь работать с ним может лишь человек. И, к тому же эта идея может разбудить воинственных крестоносцев, неприемлющих использование friend-классов
nefton
44 / 20 / 5
Регистрация: 28.02.2013
Сообщений: 184
05.03.2013, 13:18  [ТС]     Никогда не использовать конструктор с параметрами? #28
п.с. и вовсе это не противоестественно иметь обьект его не инициализируя.
чего ж вы не возмущаетесь противоестественности записи
int i;
//some code
i=5;
ITcrusader
Эксперт C++
 Аватар для ITcrusader
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
05.03.2013, 13:19     Никогда не использовать конструктор с параметрами? #29
Цитата Сообщение от CheshireCat Посмотреть сообщение
А надо - разделяй и властвуй!
Только вот грамотное разделение - никогда не будет лучшим и универсальным для любой модели, поэтому it depends.
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,309
05.03.2013, 13:27     Никогда не использовать конструктор с параметрами? #30
Цитата Сообщение от nefton Посмотреть сообщение
и вовсе это не противоестественно иметь обьект его не инициализируя.
чего ж вы не возмущаетесь противоестественности записи
int i;
//some code
i=5;
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
using namespace std;
 
int main()
{
    int i;
    cout << i << endl;
    i = 5;
}
nefton
44 / 20 / 5
Регистрация: 28.02.2013
Сообщений: 184
05.03.2013, 13:30  [ТС]     Никогда не использовать конструктор с параметрами? #31
CheshireCat, ну вот я ж и говорю что это нормально, и компилятор считает что это нормально.
а вот если i это обьект - то компилятор уже считает по другому, что не нормально иметь чтото в памяти без начальной инициализации.
хотя в книжках говорят что класс - это как бы такой тип данных.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.03.2013, 13:36     Никогда не использовать конструктор с параметрами?
Еще ссылки по теме:

C++ Пример класса с конструктором и деструктором, создание экземпляра класса через конструктор с параметрами
Как вызвать конструктор с параметрами в конструкторе без параметров? C++
Конструктор с параметрами C++

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

Или воспользуйтесь поиском по форуму:
ITcrusader
Эксперт C++
 Аватар для ITcrusader
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
05.03.2013, 13:36     Никогда не использовать конструктор с параметрами? #32
Цитата Сообщение от nefton Посмотреть сообщение
п.с. и вовсе это не противоестественно иметь обьект его не инициализируя.
чего ж вы не возмущаетесь противоестественности записи
int i;
//some code
i=5;
Да, пусть ты создал объект и он неинициализирован. НО:
во-первых, он может быть использован в таком виде - и будет тебе undefined behaviour (кстати, по-моему, этот термин потрясающе популярен и излюблен всеми))))
Во-вторых, твой кошелёк, находит ли (в случае его неинициализированности) отражение в реальном мире? Нет. его однажды создали и все. Его физические свойства - его инвариант к контексте пользования им, если ты, конечно, не предусматриваешь функцию типа tear up для человека) (для физических издевательств над кошельком многострадальным)
Yandex
Объявления
05.03.2013, 13:36     Никогда не использовать конструктор с параметрами?
Ответ Создать тему
Опции темы

Текущее время: 03:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru