С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.81
koderman
2 / 2 / 1
Регистрация: 27.11.2012
Сообщений: 131
#1

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

07.12.2012, 19:59. Просмотров 2191. Ответов 40
Метки нет (Все метки)

Прочитал про конструкторы и деструкторы. Пишут что они нужны для инициализации переменных класса. Как они используются я понял, но не понял зачем это нужно. Вместо конструктора можно ведь придумать любую другую функцию и она тоже самое будет делать?
Между строк 59 и 63 я не вижу деструктора.
В строке 8 создаётся конструктор, в строках 18-20 происходит определение конструктора, в строке 58 применяется данный конструктор. Эти строки ведь можно заменить любой другой функцией?

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

Конструкторы и деструкторы - C++
Здравствуйте уважаемые программисты, помогите пожалуйста новичку? Не могу разобраться в программе, где смог там написал комментарий и то не...

Конструкторы и деструкторы - C++
Помогите, пожалуйста, исправить программу и закончить ее как надо. Необходимо реализовать класс с двумя полями, имеющими имена first и...

Конструкторы и деструкторы - C++
Привет. Есть структура, содержащая 7 полей, в которые я ввожу значения с клавиатуры. Нужно используя конструкторы и деструкторы...

Конструкторы и деструкторы - C++
Не понимаю, как закончить программу. Написала конструктор и деструктор, хотя он тут и не нужен по идее. Но по заданию сделала. А как...

Конструкторы и деструкторы - C++
Напишите простейшие примеры объявления и определения конструкторов и деструкторов. Желательно, чтобы были примеры с различными типами данных

Конструкторы/Деструкторы - C++
Доброго времени суток! Есть проблемка... после выполнении программа вылетает (без ошибок, просто выбивает в Windows программирую на BC...

40
v.a.l.i.d
413 / 378 / 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 после такого создания? Непонятно что)
0
Croessmah
Ушел
Эксперт CЭксперт С++
13558 / 7708 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
05.01.2013, 18:24 #32
Цитата Сообщение от koderman Посмотреть сообщение
Вы вопрос не могли понять или что? Потому что со мной часто так бывает что сам ответы на вопросы нахожу потому что люди просто мой вопрос понять не могут. Конструктор Нужен просто для того чтобы переменные класса не остались без параметров. Вуаля, вот и всё что я хотел узнать. Так и спросил: для чего нужны конструкторы.
Так Вам же ответили:
Цитата Сообщение от Jupiter Посмотреть сообщение
конструктор не занимается распределением памяти, его функция - выполнение кода инициализации
Цитата Сообщение от Jupiter Посмотреть сообщение
конструктор ничего не выделят, он только инициализирует
Цитата Сообщение от sovaz1997 Посмотреть сообщение
Конструктор - это член класса, который используется для создания объектов класса. Конструктор имеет такое же название как и класс, но не имеет возвращаемого значения.
Цитата Сообщение от koderman Посмотреть сообщение
Хорошая книга всётаки: Книга: Освой самостоятельно C++ за 24 часа
Имхо, бред, а не книга.
0
koderman
2 / 2 / 1
Регистрация: 27.11.2012
Сообщений: 131
05.01.2013, 18:32  [ТС] #33
Помоему будет вызван конструктор по умолчанию, тоесть без инициализации этих переменных(x, y и ammo). Если хотите эти переменные инициализировать в классе, то вам надо создать конструктор.


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

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

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

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

Конструктор нужен чтобы переменные объекта никогда не остались без параметров.
0
Croessmah
Ушел
Эксперт CЭксперт С++
13558 / 7708 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
05.01.2013, 18:33 #34
Цитата Сообщение от koderman Посмотреть сообщение
Croessmah, вы цитируете Юпитера и поэтому решили что моя книга- бред???
Я читал эту книгу. В моем понимании она на первом месте в списке самых идиотских книг по C++

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

Не по теме:

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

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

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

Добавлено через 3 минуты
Цитата Сообщение от koderman Посмотреть сообщение
Чтобы придать классу законченность, при объявлении конструктора не забудьте объявить и деструктор, даже если ему нечего делать. Хотя и стандартный деструктор будет работать корректно, отнюдь не повредит объявить собственный. Это делает программу более ясной.
Совсем другое дело. И
Объявив конструктор, необходимо объявить и деструктор.
В первом случае речь о стиле, во втором об обязательном синтаксисе.
1
Evg
Эксперт CАвтор FAQ
18383 / 6431 / 441
Регистрация: 30.03.2009
Сообщений: 17,853
Записей в блоге: 28
05.01.2013, 23:34 #40
Цитата Сообщение от koderman Посмотреть сообщение
Пишут что они нужны для инициализации переменных класса. Как они используются я понял, но не понял зачем это нужно
Условно можешь считать, что конструктор - это функция, которая автоматически вызывается при создании объекта, а деструктор - это функция, которая вызывается при удалении объекта

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

Цитата Сообщение от koderman Посмотреть сообщение
Кстати опечаток в ней я ещё не находил
Степень идиотизма книги определяется качеством содержимого, а не количеством опечаток
0
taras atavin
3570 / 1754 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
06.01.2013, 10:02 #41
Цитата Сообщение от Evg Посмотреть сообщение
Условно можешь считать, что конструктор - это функция, которая автоматически вызывается при создании объекта, а деструктор - это функция, которая вызывается при удалении объекта
Первые четыре слова здесь лишние.

Добавлено через 1 минуту
Цитата Сообщение от Evg Посмотреть сообщение
За исключением того, что поле класса, объявленное как const, можно инициализировать только в конструкторе.
Так ведь можно и не объявлять таких полей.
0
06.01.2013, 10:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.01.2013, 10:02
Привет! Вот еще темы с ответами:

Конструкторы и деструкторы - C++
Код: #include <iostream> #include <stdlib.h> #include <conio.h> class complex { private: double im; double...

Конструкторы и деструкторы - C++
Помогите исправить программу. Необходимо реализовать класс с двумя полями, имеющими имена first и second. Обязательно должны...

Конструкторы и деструкторы - C++
Необходимо реализовать класс с двумя полями, имеющими имена first и second. Обязательно должны присутствовать: Для инициализации...

Конструкторы и деструкторы - C++
#include <iostream> #include <Windows.h> class Try { public: void* px; Try() { printf("Try\n"); px=malloc(12); }; ...


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

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

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