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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.69
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
#1

Методы init() и dispose() - теория - C++

11.07.2013, 17:16. Просмотров 1773. Ответов 44
Метки нет (Все метки)

Всегда интересовало, зачем существуют эти методы? Допустим, есть некоторый объект класса и в коде видим:
C++
1
2
3
4
5
x = new myClass();
x.init();
...
x.dispose();
delete x;
Одно дело, если бы в эти методы передавались параметры, а другое дело это. Разве не проще было бы весь код init поместить в конструктор, а dispose, соответственно, в деструктор?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.07.2013, 17:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Методы init() и dispose() - теория (C++):

Виртуальные методы(теория) - C++
Здравствуйте уважаемые форумчане! В ходе обучения языку с++ возник вопрос непонимания назначения виртуальных методов. Попытался...

No init for const! - C++
Доброе утро, котаны!:) Вопрос - в джаве есть возможность сделать такую штуку final boolean someBool; someBool = true; То есть...

Lambda init capture by const reference - C++
Всем привет. Почему не получается добиться следующего поведения: auto main() -> int { int ival = 0; () { // Need...

функция вида init( struct ****) - segmentation fault - C++
Прошу помочь, уже всю голову сломал. Дан следующий код struct square { bool is_rect; int is_side; struct square...

Что делает оператор init в данной ситуации (работа с двумерными массивами) - C++
Есть фрагмент кода C++. const int ROWS = 10, COLUMNS = 10; int matrix; init(&matrix); int temp, sum = 0;

Разработать классы для описанных ниже объектов. Включить в класс методы set (…), get (…), show (…). Определить другие методы - C++
Разработать классы для описанных ниже объектов. Включить в класс методы set (…), get (…), show (…). Определить другие методы Abiturient:...

44
Avazart
Нарушитель
Эксперт С++
7233 / 5405 / 294
Регистрация: 10.12.2010
Сообщений: 23,956
Записей в блоге: 17
13.07.2013, 17:31 #31
Цитата Сообщение от IGPIGP Посмотреть сообщение
Там Init() использовали для инициализации структур, как стиль.
Там это где ? В какой библиотеке или коде?
Может это просто изврат данного конкретного разработчика.

Как вроде подчеркнули зависит от назначения кода и вкуса ...
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6503 / 3139 / 307
Регистрация: 04.12.2011
Сообщений: 8,661
Записей в блоге: 5
13.07.2013, 17:40 #32
Цитата Сообщение от Avazart Посмотреть сообщение
А то чет я такого не замечал.
Да и в книгах по С++, встречается, когда говорят о С и структурах, приводят примеры. Это вопрос кто как привык. Кому-то нравится много отдельных функций и он постоянно заботится о порядке их вызова (если надо) при инициализации экземпляра структуры, а кто-то собирает в один метод. Вопрос как его назвать, тоже сложная нравственная дилемма... Я встречал init() и Init() и initialise() даже кажется. Если вопрос где, интересен, - пороюсь. Хотя не может быть, что бы это только мне привелось видеть.
0
Avazart
Нарушитель
Эксперт С++
7233 / 5405 / 294
Регистрация: 10.12.2010
Сообщений: 23,956
Записей в блоге: 17
13.07.2013, 17:54 #33
Так где вы такую литературу С++ надыбали ?

Обычно все решается в конструкторе, на то он и конструктор.
Но есть ситуации когда бывает нужно "переинициализировать" переменные например открыть другую базу данных ... ( закрыть старую, открыть новую ), например методом open(), но в таких случаях он в принципе дублирует конструктор(ы).

Разбиение/объединение в методы это вопрос назначения класса тут- удобство/возможности.

Чем больше методов больше возможностей и более гибко можно использовать класс (возможно, а возможно и нет), но он менее удобен в конкретной задаче: много методов- легко запутаться, тяжело читается в общем коде.

Добавлено через 6 минут
Если же вы плодите куча методов и они дают больше возможностей чем затребовано, то скорее всего вы нарушаете инкапсуляцию.
0
Kuzia domovenok
1892 / 1747 / 119
Регистрация: 25.03.2012
Сообщений: 5,936
Записей в блоге: 1
13.07.2013, 18:29 #34
Цитата Сообщение от Avazart Посмотреть сообщение
Обычно все решается в конструкторе
В языке Си нету конструкторов
Цитата Сообщение от Avazart Посмотреть сообщение
Так где вы такую литературу С++ надыбали ?
У Б.Эккеля видел нечто подобное. Там он обосновывал необходимость конструкторов. изначально приводя примеры, как это выглядело бы на Си, до того, как изучены классы.
1
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6503 / 3139 / 307
Регистрация: 04.12.2011
Сообщений: 8,661
Записей в блоге: 5
13.07.2013, 18:46 #35
Цитата Сообщение от Avazart Посмотреть сообщение
Так где вы такую литературу С++ надыбали ?
//------------------------------------------------------------------------------------
В.В. Лаптев
С++ Объектно-ориентированное программирование.
Изд-во Питер 2008г.
стр.26
C++
1
void Init( const long double& t = 0.0 ){//функция инициализации структуры Tmoney
//-------------------------------------------------------------------------------------
Б. Страуструп
Язык программирования С++. Специальное издание.
Москва, БИНОМ, 2011г.
стр. 284, 285
C++
1
void Date::init(int dd, int mm, int yy);//объявление метода инициализации структуры Date
//-------------------------------------------------------------------------------------
0
Avazart
Нарушитель
Эксперт С++
7233 / 5405 / 294
Регистрация: 10.12.2010
Сообщений: 23,956
Записей в блоге: 17
13.07.2013, 19:24 #36
Цитата Сообщение от IGPIGP Посмотреть сообщение
. Страуструп
Язык программирования С++. Специальное издание.
Москва, БИНОМ, 2011г.
стр. 284, 285
Глава какая, а то чет не сходится.
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6503 / 3139 / 307
Регистрация: 04.12.2011
Сообщений: 8,661
Записей в блоге: 5
13.07.2013, 19:27 #37
Цитата Сообщение от Avazart Посмотреть сообщение
Глава какая, а то чет не сходится.
10.2.1 Функции-члены
0
Avazart
Нарушитель
Эксперт С++
7233 / 5405 / 294
Регистрация: 10.12.2010
Сообщений: 23,956
Записей в блоге: 17
13.07.2013, 19:30 #38
Методы init() и dispose() - теория

Где ?

Дальше на страницах тоже нет, может издание не то ( год выпуска не знаю )
0
Kuzia domovenok
1892 / 1747 / 119
Регистрация: 25.03.2012
Сообщений: 5,936
Записей в блоге: 1
13.07.2013, 19:32 #39
Цитата Сообщение от Avazart Посмотреть сообщение
Где ?
а где тут где стр. 284, 285 ?
0
Avazart
Нарушитель
Эксперт С++
7233 / 5405 / 294
Регистрация: 10.12.2010
Сообщений: 23,956
Записей в блоге: 17
13.07.2013, 19:36 #40
Листаем назад, на стр. 272 читаем :
0
Миниатюры
Методы init() и dispose() - теория  
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6503 / 3139 / 307
Регистрация: 04.12.2011
Сообщений: 8,661
Записей в блоге: 5
13.07.2013, 19:56 #41
Цитата Сообщение от Avazart Посмотреть сообщение
Где ?
Год какой? Издание? У меня 2011 БИНОМ. Там 10.2 Классы. Начинается с начала страницы и через 3 строчки - 10.2.1 Функции члены.
Рассмотрим реализацию концепции даты с помощью структуры Date....
Эту страничку покажите.
0
Avazart
Нарушитель
Эксперт С++
7233 / 5405 / 294
Регистрация: 10.12.2010
Сообщений: 23,956
Записей в блоге: 17
13.07.2013, 20:01 #42
Цитата Сообщение от IGPIGP Посмотреть сообщение
Год какой? Издание?
Сказал же не знаю...

Добавлено через 3 минуты
Цитата Сообщение от IGPIGP Посмотреть сообщение
Там 10.2 Классы. Начинается с начала страницы и через 3 строчки - 10.2.1 Функции члены.
Рассмотрим реализацию концепции даты с помощью структуры Date....
У меня также начинается...

Пример идет со структуры ( Си !!!! )
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6503 / 3139 / 307
Регистрация: 04.12.2011
Сообщений: 8,661
Записей в блоге: 5
13.07.2013, 20:02 #43
Цитата Сообщение от Avazart Посмотреть сообщение
Пример идет со структуры
Дык, а я о чем?
0
Avazart
Нарушитель
Эксперт С++
7233 / 5405 / 294
Регистрация: 10.12.2010
Сообщений: 23,956
Записей в блоге: 17
13.07.2013, 20:04 #44
Дык в стиле Си, и дальше постепенно идет переход С++ стилю - метода, классам, конструкторам

В том числе к этому Методы init() и dispose() - теория
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6503 / 3139 / 307
Регистрация: 04.12.2011
Сообщений: 8,661
Записей в блоге: 5
13.07.2013, 20:10 #45
Цитата Сообщение от Avazart Посмотреть сообщение
Дык в стиле Си, и дальше идет постепенно идет переход С++ стилю
Именно. Ключевые слова С и стиль. Там в первом упоминании они есть:
Цитата Сообщение от IGPIGP Посмотреть сообщение
В С тоже. Там Init() использовали для инициализации структур, как стиль.
0
13.07.2013, 20:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.07.2013, 20:10
Привет! Вот еще темы с ответами:

Создать класс Triad (тройка чисел) - определить методы; определить производный класс Date - переопределить методы - C++
Создать класс Triad (тройка чисел); определить методы увеличения полей на 1. Определить производный класс Date с полями: год, месяц и день....

Методы у JInternalFrame: setClosed(true); dispose(); - Java
Проблема следующая: по нажатию на кнопку создается окно JInternalFrame win = new JInternalFrame('New',true,true,true,true);потом в это...

Это правда, что Close() и Clear() методы в .NET классах вызывают Dispose()? - .NET
Всем привет. Подскажите, пожалуйста: 1) Это правда, что Close() и Clear() методы в .NET классах вызывают Dispose()? 2) Блок using()...

Ошибка при загрузке Ubuntu 14.04 LTS: run-init: /sbin/init: Permission denied - Ubuntu Linux
Здравствуйте! На компьютере установлена Uuntu 14.04 LTS (64 bit). После установки cups (для соединения с принтером) система перестала...


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

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

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