| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Конструкторы и деструкторы |
| Автор: GLeBaTi 1.2.2008, 18:55 |
| я уже много раз встречал термин "конструктор", я знаю где и как его писать, но никак не могу понять его предназначение. Зачем он нужен вообще ? |
| Автор: JackYF 1.2.2008, 19:02 |
Инициализация. Когда ты создаешь объект, для него вызывается "конструктор". |
| Автор: GLeBaTi 1.2.2008, 19:44 |
| Значит если создаешь объект, то обязательно надо создать конструктор ? А если не зоздать, что будет ? |
| Автор: JackYF 1.2.2008, 20:20 |
Будет вызван конструктор по-умолчанию, который не делает ничего. |
| Автор: GLeBaTi 1.2.2008, 21:02 |
| Значит при каждом обращении к объекту, вызывается его конструктор или только один раз ? заранее спасибо за ответ! |
| Автор: Exai1e 1.2.2008, 21:37 | ||
Не ну почему же, он делает чтото, вот ток надо глянуть в конструкторе этого класса что он делает |
| Автор: new_web 1.2.2008, 22:25 | ||||||
| Ну, почему-же? Любой конструктор ,что-то да и делает - выделяет память для переменных, может их инициализировать началными значениями, договаривается с виндовс если в unit.h
то в unit.срр
Полезно там инициализировать разные данные. данные - типа:"по-умолчанию" Так класс отвечает сам за инициализуцию своих параметов, не полагаясь на стооннюю функцию, в наше время никому верить нельзя! Для каждого объекта любого класса создаётся только один контруктор, и один деструктор - который освобождает память, уничтожает ПЕРЕМЕННЫЕ, И ТАК ДАЛЕЕ деструктор в действии можно увидеть:
|
| Автор: JackYF 1.2.2008, 22:58 |
| Ну, если по-хорошему, то конструктор по-умолчанию не выделяет никому память и не задаёт никому значения. Всё, что он делает - это вызывает конструкторы по-умолчанию членов класса/структуры. |
| Автор: Любитель 1.2.2008, 23:00 |
Эт чего он должен выделять? Если объект стековый, память резервируется при входе в функцию. Но о выделении речи здесь нет - просто компилятор должен знать размер объекта (скока выделять под фрейм локальных переменных). Странная формулировка - может так, может не так... Но доля истины есть А о чём он должен с ней договариваться? Конструктор по умолчанию формально всё, что делает - вызывает дефолтный конструктор классов предков и конструкторы всех полей, не являющихся встроенными типами. |
| Автор: archimed7592 1.2.2008, 23:01 | ||
Ничего не делает только тривиальный конструктор. Да нет, выделять память под объект - это не в компетенции конструктора. |
| Автор: Любитель 1.2.2008, 23:02 |
| PS А вообще по таким вопросам - |
| Автор: GLeBaTi 1.2.2008, 23:28 |
| Всё, я понял, спасибо можете удалять тему |
| Автор: new_web 1.2.2008, 23:33 | ||
Да, конечно, и я прошу прощение, что возможно ввёл кого-то в заблуждение! НО. так или иначе конструктор объявляет всей видимости, что надо выделить память под переменную некотороего типа. Кто там куда чего где выделяет - это уже другой вопрос. Ну, а "договор с виндовс" можно увидеть если в пошаговом режиме зайти в функцию, ...там столько всего...непонятного...но понимаю. что програму открывает и показывает и закрывает виндовс... вся эта работа для програмиста сделана уже, согласно концепции ООП... Создатели уже побеспокоились о том как заставить виндовс показать окно...было бы что в нём показывать... |
| Автор: archimed7592 2.2.2008, 00:41 | ||||
Этим занимается не конструктор(если вообще кто-либо занимается
Скомпилируй код, что я выше привёл и зайди в ctor в пошаговом режиме - ничего непонятного ты не увидишь. Если бы на каждый объект программа "договаривалась бы с виндовс", то они бы точно не договорились бы... |