Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Конструкторы и деструкторы 
:(
    Опции темы
GLeBaTi
Дата 1.2.2008, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 1.2.2008
Где: г.Чебоксары

Репутация: -1
Всего: 0



я уже много раз встречал термин "конструктор", я знаю где и как его писать, но никак не могу понять его предназначение.
 Зачем он нужен вообще ?
PM MAIL   Вверх
JackYF
Дата 1.2.2008, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 6
Всего: 162



Цитата(GLeBaTi @  1.2.2008,  17:55 Найти цитируемый пост)
Зачем он нужен вообще ? 

Инициализация. Когда ты создаешь объект, для него вызывается "конструктор".


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
GLeBaTi
Дата 1.2.2008, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 1.2.2008
Где: г.Чебоксары

Репутация: -1
Всего: 0



Значит если создаешь объект, то обязательно надо создать конструктор ? 
А если не зоздать, что будет ?
PM MAIL   Вверх
JackYF
Дата 1.2.2008, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 6
Всего: 162



Цитата(GLeBaTi @  1.2.2008,  18:44 Найти цитируемый пост)
А если не зоздать, что будет ? 

Будет вызван конструктор по-умолчанию, который не делает ничего.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
GLeBaTi
Дата 1.2.2008, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 1.2.2008
Где: г.Чебоксары

Репутация: -1
Всего: 0



Значит при каждом обращении к объекту, вызывается его конструктор или только один раз ?

                                                                                                                          заранее спасибо за ответ!
PM MAIL   Вверх
Exai1e
Дата 1.2.2008, 21:37 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 908
Регистрация: 3.12.2006
Где: Moscow

Репутация: нет
Всего: 30



Код

Будет вызван конструктор по-умолчанию, который не делает ничего. 


Не ну почему же, он делает чтото, вот ток надо глянуть в конструкторе этого класса что он делает smile ;)


--------------------
"Решение зависит от выбранного геморроя" © Snowy
"у нас как в армии - либо работает, либо так и задумано"
PM MAIL ICQ   Вверх
JackYF
Дата 1.2.2008, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 6
Всего: 162



Цитата(Exai1e @  1.2.2008,  20:37 Найти цитируемый пост)
Не ну почему же, он делает чтото, вот ток надо глянуть в конструкторе этого класса что он делает

Сам понял, что сказал? smile Если конструктора не будет, он будет делать что-то?  smile 


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
new_web
Дата 1.2.2008, 22:25 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 1.2.2008

Репутация: нет
Всего: нет



Ну, почему-же? Любой конструктор ,что-то да и делает - выделяет память для переменных, может их инициализировать началными значениями, договаривается с виндовс smile 
если в unit.h
Код

class TSomeConstruct//
{
private:
int i;
public:
TSomeConstruct();//конструктор
~TSomeConstruct();//деструктор
};

то в unit.срр
Код

#include "main.h"//заголовочынй файл. где  форма, и всё что с ней.
TSomeConstruct::TSomeConstruct()
{
Form1-> Label1->Caption="Это же я, конструктор!)))))))";
i=12345;
//получилось, чо конструктор., на всю жизнь задал значение приватного параметра i
}

Полезно там инициализировать разные данные. данные - типа:"по-умолчанию"
Так класс отвечает сам за инициализуцию своих параметов, не полагаясь на стооннюю функцию, в наше время никому верить нельзя!
Для каждого объекта любого класса создаётся только один контруктор, и один деструктор - который освобождает память, уничтожает ПЕРЕМЕННЫЕ, И ТАК ДАЛЕЕ
деструктор в действии можно увидеть:
Код

TSomeConstruct::~TSomeConstruct()
{
ShowMessage("Ай-яй-яй, убили обьект типа TSomeConstruct, убили обьект типа TSomeConstruct");
}




Это сообщение отредактировал(а) new_web - 1.2.2008, 22:35
PM MAIL   Вверх
JackYF
Дата 1.2.2008, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 6
Всего: 162



Ну, если по-хорошему, то конструктор по-умолчанию не выделяет никому память и не задаёт никому значения. Всё, что он делает - это вызывает конструкторы по-умолчанию членов класса/структуры.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Любитель
Дата 1.2.2008, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: нет
Всего: 92



Цитата(new_web @  1.2.2008,  22:25 Найти цитируемый пост)
выделяет память для переменных

Эт чего он должен выделять? Если объект стековый, память резервируется при входе в функцию. Но о выделении речи здесь нет - просто компилятор должен знать размер объекта (скока выделять под фрейм локальных переменных).

Цитата(new_web @  1.2.2008,  22:25 Найти цитируемый пост)
может их инициализировать началными значениями

Странная формулировка - может так, может не так... Но доля истины есть smile

Цитата(new_web @  1.2.2008,  22:25 Найти цитируемый пост)
договаривается с виндовс

А о чём он должен с ней договариваться? smile 

Конструктор по умолчанию формально всё, что делает - вызывает дефолтный конструктор классов предков и конструкторы всех полей, не являющихся встроенными типами.


--------------------
PM MAIL ICQ Skype   Вверх
archimed7592
Дата 1.2.2008, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 6
Всего: 93



Цитата(JackYF @  1.2.2008,  20:20 Найти цитируемый пост)
который не делает ничего.

Код

struct L
{
    L()
    {  std::cout << "hi" << std::endl; }
};
struct D
    :   public L
{ };
struct A
{
    L l;
};

D d; // выведет hi
A a; // выведет hi

Ничего не делает только тривиальный конструктор.

Цитата(new_web @  1.2.2008,  22:25 Найти цитируемый пост)
выделяет память для переменных
Да нет, выделять память под объект - это не в компетенции конструктора.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Любитель
Дата 1.2.2008, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: нет
Всего: 92



PS А вообще по таким вопросам -  smile 


--------------------
PM MAIL ICQ Skype   Вверх
GLeBaTi
Дата 1.2.2008, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 1.2.2008
Где: г.Чебоксары

Репутация: -1
Всего: 0



Всё, я понял, спасибо  smile 

                              можете удалять тему
PM MAIL   Вверх
new_web
Дата 1.2.2008, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 1.2.2008

Репутация: нет
Всего: нет



Цитата(archimed7592 @ 1.2.2008,  23:01)


Цитата(new_web @  1.2.2008,  22:25 Найти цитируемый пост)
выделяет память для переменных
Да нет, выделять память под объект - это не в компетенции конструктора.

Да, конечно, и я прошу прощение, что возможно ввёл кого-то в заблуждение!
НО. так или иначе конструктор объявляет всей видимости, что надо выделить память под переменную некотороего типа. Кто там куда чего где выделяет - это уже другой вопрос.
Ну, а "договор с виндовс" можно увидеть если в пошаговом режиме зайти в функцию, ...там столько всего...непонятного...но понимаю. что програму открывает и показывает и закрывает виндовс...
вся эта работа для програмиста сделана уже, согласно концепции ООП... 
Создатели уже побеспокоились о том как заставить виндовс показать окно...было бы что в нём показывать...
PM MAIL   Вверх
archimed7592
Дата 2.2.2008, 00:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 6
Всего: 93



Цитата(new_web @  1.2.2008,  23:33 Найти цитируемый пост)
так или иначе конструктор объявляет всей видимости, что надо выделить память под переменную некотороего типа.

Этим занимается не конструктор(если вообще кто-либо занимается smile).


Цитата(new_web @  1.2.2008,  23:33 Найти цитируемый пост)
Ну, а "договор с виндовс" можно увидеть если в пошаговом режиме зайти в функцию, ...там столько всего...непонятного...но понимаю. что програму открывает и показывает и закрывает виндовс...

Скомпилируй код, что я выше привёл и зайди в ctor в пошаговом режиме - ничего непонятного ты не увидишь.
Если бы на каждый объект программа "договаривалась бы с виндовс", то они бы точно не договорились бы...


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1276 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.