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

Конструкторы и деструкторы - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.81
koderman
2 / 2 / 1
Регистрация: 27.11.2012
Сообщений: 131
07.12.2012, 19:59     Конструкторы и деструкторы #1
Прочитал про конструкторы и деструкторы. Пишут что они нужны для инициализации переменных класса. Как они используются я понял, но не понял зачем это нужно. Вместо конструктора можно ведь придумать любую другую функцию и она тоже самое будет делать?
Между строк 59 и 63 я не вижу деструктора.
В строке 8 создаётся конструктор, в строках 18-20 происходит определение конструктора, в строке 58 применяется данный конструктор. Эти строки ведь можно заменить любой другой функцией?

Извиняюсь. Конструкторы служат для создания и инициализации ОБЪЕКТОВ класса.
Миниатюры
Конструкторы и деструкторы   Конструкторы и деструкторы  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.12.2012, 19:59     Конструкторы и деструкторы
Посмотрите здесь:

C++ Конструкторы/Деструкторы
C++ Конструкторы и деструкторы
C++ Классы. Конструкторы. Деструкторы
C++ Конструкторы и деструкторы
Конструкторы и деструкторы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
koderman
2 / 2 / 1
Регистрация: 27.11.2012
Сообщений: 131
07.12.2012, 20:42  [ТС]     Конструкторы и деструкторы #21
Цитата Сообщение от Croessmah Посмотреть сообщение

Не по теме:


Вы просто не внимательно на код смотрели в книге по другому


Инициализация, присваивание и уничтожение класса
Объект Frisky

Ок. понятно.
Миниатюры
Конструкторы и деструкторы  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6373 / 4839 / 440
Регистрация: 14.02.2011
Сообщений: 16,038
07.12.2012, 20:45     Конструкторы и деструкторы #22
Цитата Сообщение от koderman Посмотреть сообщение
Объект Frisky
ну а где конструктор описывается в классе ?
уж не в public ли?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11800 / 6779 / 765
Регистрация: 27.09.2012
Сообщений: 16,829
Записей в блоге: 2
Завершенные тесты: 1
07.12.2012, 20:45     Конструкторы и деструкторы #23

Не по теме:

Цитата Сообщение от koderman Посмотреть сообщение
Объект Frisky
Я Вам про Фому, Вы мне про Ерему


Почитайте еще раз про конструкторы с деструкторами - чем дальше будете заходить, тем больше будете понимать зачем они нужны.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
07.12.2012, 21:41     Конструкторы и деструкторы #24
Цитата Сообщение от sovaz1997 Посмотреть сообщение
КОНСТРУКТОР (именно он) выделяет память под объект!!!
конструктор ничего не выделят, он только инициализирует
Croessmah
07.12.2012, 21:48
  #25

Не по теме:

КОНСТРУКТОР (именно он) выделяет память под объект!!!
такого я еще не слышал

Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
07.12.2012, 21:54     Конструкторы и деструкторы #26
конструктор не занимается распределением памяти, его функция - выполнение кода инициализации
Croessmah
07.12.2012, 21:56
  #27

Не по теме:

Цитата Сообщение от Jupiter Посмотреть сообщение
конструктор не занимается распределением памяти, его функция - выполнение кода инициализации
Согласен, не корректно получилось. Вы еще, наверное, первый вариант не видели. С Вами абсолютно согласен, прост еще не от кого не доводилось слышать, что конструктор выделяет память под объект.

koderman
2 / 2 / 1
Регистрация: 27.11.2012
Сообщений: 131
05.01.2013, 18:00  [ТС]     Конструкторы и деструкторы #28
Ну блин ёмаё. Приложил скрин на котором ответ который я хотел узнать в этой теме. Вы вопрос не могли понять или что? Потому что со мной часто так бывает что сам ответы на вопросы нахожу потому что люди просто мой вопрос понять не могут. Конструктор Нужен просто для того чтобы переменные класса не остались без параметров. Вуаля, вот и всё что я хотел узнать. Так и спросил: для чего нужны конструкторы. Но всёравно спасибо за дискуссию, новое я из неё тоже узнал. В прошлый раз видать или не понял главу или не допонял. Кароче второй раз прочитал. Хорошая книга всётаки: Книга: Освой самостоятельно C++ за 24 часа
Автор: Либерти, Джесс, Хорват, Дэвид
Миниатюры
Конструкторы и деструкторы  
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
05.01.2013, 18:07     Конструкторы и деструкторы #29
Цитата Сообщение от koderman Посмотреть сообщение
Как они используются я понял, но не понял зачем это нужно. Вместо конструктора можно ведь придумать любую другую функцию и она тоже самое будет делать?
Другую функцию надо будет явно вызывать, о чём в большой программе можно забыть, а конструктор - это функция, вызываемая автоматически при создании любого объекта. А если ещё объект создаёт не автор класса, то он может вообще не знать, какую функцию надо вызывать, пришлось бы к каждому классу писать инструкцию, в которой указывать, что надо вызвать при инициализации экземпляра. А конструктор вызывается автоматически, но это тоже просто инициализирующая функция. Это просто такой синтаксис, чтоб гарантировать, что функция инициализации экземпляра будет вызвана для всех экземпляров.
Цитата Сообщение от koderman Посмотреть сообщение
Между строк 59 и 63 я не вижу деструктора.
Явный деструктор нужен далеко не всегда.
koderman
2 / 2 / 1
Регистрация: 27.11.2012
Сообщений: 131
05.01.2013, 18:13  [ТС]     Конструкторы и деструкторы #30
В книге написано: Объявив конструктор, необходимо объявить и деструктор.
v.a.l.i.d
 Аватар для v.a.l.i.d
412 / 377 / 10
Регистрация: 21.09.2012
Сообщений: 913
05.01.2013, 18:19     Конструкторы и деструкторы #31
Цитата Сообщение от koderman Посмотреть сообщение
Объект я создам например так без всякого конструктора
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class soldier
{
public:
  int x,y;
  int ammo;
};
 
 int main
 
{
 
soldier OBJEKT;
 
};
Правильно. Создашь объект без всякого конструктора. Интересно, а что будет записано в переменные x, y и ammo после такого создания? Непонятно что)
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11800 / 6779 / 765
Регистрация: 27.09.2012
Сообщений: 16,829
Записей в блоге: 2
Завершенные тесты: 1
05.01.2013, 18:24     Конструкторы и деструкторы #32
Цитата Сообщение от koderman Посмотреть сообщение
Вы вопрос не могли понять или что? Потому что со мной часто так бывает что сам ответы на вопросы нахожу потому что люди просто мой вопрос понять не могут. Конструктор Нужен просто для того чтобы переменные класса не остались без параметров. Вуаля, вот и всё что я хотел узнать. Так и спросил: для чего нужны конструкторы.
Так Вам же ответили:
Цитата Сообщение от Jupiter Посмотреть сообщение
конструктор не занимается распределением памяти, его функция - выполнение кода инициализации
Цитата Сообщение от Jupiter Посмотреть сообщение
конструктор ничего не выделят, он только инициализирует
Цитата Сообщение от sovaz1997 Посмотреть сообщение
Конструктор - это член класса, который используется для создания объектов класса. Конструктор имеет такое же название как и класс, но не имеет возвращаемого значения.
Цитата Сообщение от koderman Посмотреть сообщение
Хорошая книга всётаки: Книга: Освой самостоятельно C++ за 24 часа
Имхо, бред, а не книга.
koderman
2 / 2 / 1
Регистрация: 27.11.2012
Сообщений: 131
05.01.2013, 18:32  [ТС]     Конструкторы и деструкторы #33
Помоему будет вызван конструктор по умолчанию, тоесть без инициализации этих переменных(x, y и ammo). Если хотите эти переменные инициализировать в классе, то вам надо создать конструктор.


Насчёт деструктора нашёл.:

Чтобы придать классу законченность, при объявлении конструктора не забудьте объявить и деструктор, даже если ему нечего делать. Хотя и стандартный деструктор будет работать корректно, отнюдь не повредит объявить собственный. Это делает программу более ясной.

Добавлено через 2 минуты
Croessmah, вы цитируете Юпитера и поэтому решили что моя книга- бред???

Добавлено через 4 минуты
Croessmah, так вот я как раз и не мог понять зачем надо использовать этот конструктор только для инициализации. Понимаете? Придумывать новое понятие как класс только для того чтобы инициализировать.. Я этот ответ искал:

Конструктор нужен чтобы переменные объекта никогда не остались без параметров.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11800 / 6779 / 765
Регистрация: 27.09.2012
Сообщений: 16,829
Записей в блоге: 2
Завершенные тесты: 1
05.01.2013, 18:33     Конструкторы и деструкторы #34
Цитата Сообщение от koderman Посмотреть сообщение
Croessmah, вы цитируете Юпитера и поэтому решили что моя книга- бред???
Я читал эту книгу. В моем понимании она на первом месте в списке самых идиотских книг по C++

Добавлено через 50 секунд
Цитата Сообщение от koderman Посмотреть сообщение
Конструктор нужен чтобы переменные объекта никогда не остались без параметров.
То есть для инициализации объекта
koderman
2 / 2 / 1
Регистрация: 27.11.2012
Сообщений: 131
05.01.2013, 18:34  [ТС]     Конструкторы и деструкторы #35
Ну видать у меня понимание на таком уровне, потому что никакие другие книги я не понимаю. Абракадабра какаято везде.
Кстати опечаток в ней я ещё не находил. Хотя это перевод.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
05.01.2013, 18:36     Конструкторы и деструкторы #36
Цитата Сообщение от koderman Посмотреть сообщение
В книге написано: Объявив конструктор, необходимо объявить и деструктор.
Это где? В нормальных книгах пишут:
Деструктор может отсутствовать, тогда компилятор неявно создаст пустой деструктор.
.
koderman
2 / 2 / 1
Регистрация: 27.11.2012
Сообщений: 131
05.01.2013, 18:37  [ТС]     Конструкторы и деструкторы #37
Цитата Сообщение от taras atavin Посмотреть сообщение
Это где? В нормальных книгах пишут: .
На третьей странице я скрин выложил из книги.
Ну дальше я написал про деструктор.
Конструкторы и деструкторы
Сообщение 33
Croessmah
05.01.2013, 18:37
  #38

Не по теме:

Цитата Сообщение от taras atavin Посмотреть сообщение
Это где? В нормальных книгах пишут:
это на скриншоте

taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
05.01.2013, 18:49     Конструкторы и деструкторы #39
Цитата Сообщение от koderman Посмотреть сообщение
Кстати опечаток в ней я ещё не находил. Хотя это перевод.
Не показатель, в место них там грубые ошибки.

Добавлено через 7 минут
Цитата Сообщение от koderman Посмотреть сообщение
Абракадабра какаято везде.
Как раз абрукадабру ты и читаешь. Взять хотябы
стандартный конструктор
. Стандартный - это который предписан стандартом и отступать от него нельзя, а в c++ в любом классе можно произвольно определить свой конструктор с любыми параметрами, или без них вообще, так что стандартных конструкторов как раз не бывает. default constructor, как было в оригинале, означает конструктор по умолчанию, то есть, если не написан другой. Вот оригинал как раз правильный.

Добавлено через 3 минуты
Цитата Сообщение от koderman Посмотреть сообщение
Чтобы придать классу законченность, при объявлении конструктора не забудьте объявить и деструктор, даже если ему нечего делать. Хотя и стандартный деструктор будет работать корректно, отнюдь не повредит объявить собственный. Это делает программу более ясной.
Совсем другое дело. И
Объявив конструктор, необходимо объявить и деструктор.
В первом случае речь о стиле, во втором об обязательном синтаксисе.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.01.2013, 23:34     Конструкторы и деструкторы
Еще ссылки по теме:

Пустые конструкторы и деструкторы C++
C++ Закрыты конструкторы и деструкторы!
Конструкторы и деструкторы C++

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

Или воспользуйтесь поиском по форуму:
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16821 / 5242 / 318
Регистрация: 30.03.2009
Сообщений: 14,118
Записей в блоге: 26
05.01.2013, 23:34     Конструкторы и деструкторы #40
Цитата Сообщение от koderman Посмотреть сообщение
Пишут что они нужны для инициализации переменных класса. Как они используются я понял, но не понял зачем это нужно
Условно можешь считать, что конструктор - это функция, которая автоматически вызывается при создании объекта, а деструктор - это функция, которая вызывается при удалении объекта

Цитата Сообщение от koderman Посмотреть сообщение
Вместо конструктора можно ведь придумать любую другую функцию и она тоже самое будет делать?
Можно. С этой точки зрения конструктор не делает ничего такого, что нельзя было бы сделать из обычной функции. За исключением того, что поле класса, объявленное как const, можно инициализировать только в конструкторе. Конструктор и деструктор условно можно считать элементами удобства, но на такие вот удобства закладывается практически любая технология, работающая через шаблоны. Зачем нужен конструктор и чем он лучше явного вызова функции или метода, основываясь на теории ты никогда не поймёшь. Только на практике. Если будет не в облом, то попробуй любую программу реализовывать в двух вариантах - с конструкторами/деструкторами и без них. Со временем сам увидишь, который из вариантов более удобный и надёжный

Цитата Сообщение от koderman Посмотреть сообщение
Кстати опечаток в ней я ещё не находил
Степень идиотизма книги определяется качеством содержимого, а не количеством опечаток
Yandex
Объявления
05.01.2013, 23:34     Конструкторы и деструкторы
Ответ Создать тему
Опции темы

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