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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопросик по конструкторам 
:(
    Опции темы
Killer_13
  Дата 30.4.2010, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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

Насколько я понимаю конструктор создается автоматически при создании обьекта класса. Эт понятно. Чаще всего, тоисть почти основное его назначение, "инициализация элементов данных класса".

Так вот напрашивается вопрос, а не проще ли с самого начала задать начальные значения элементов данных класса?

Спасибо
PM MAIL   Вверх
kemiisto
Дата 30.4.2010, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



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

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



Цитата(Killer_13 @  30.4.2010,  17:35 Найти цитируемый пост)
Насколько я понимаю конструктор создается автоматически при создании обьекта класса. Эт понятно.

Это бред.


Цитата(Killer_13 @  30.4.2010,  17:35 Найти цитируемый пост)
Так вот напрашивается вопрос, а не проще ли с самого начала задать начальные значения элементов данных класса?

Это как?


--------------------
PM MAIL WWW GTalk Jabber   Вверх
azesmcar
Дата 30.4.2010, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



Цитата(Killer_13 @  30.4.2010,  16:35 Найти цитируемый пост)
Насколько я понимаю конструктор создается автоматически при создании обьекта класса


Цитата(kemiisto @  30.4.2010,  16:51 Найти цитируемый пост)
Это бред.

 smile 

Конструктор по умолчанию (это тот, который может быть вызван без передачи аргументов) генерируется компилятором, если он (или какой либо другой конструктор) не написан пользователем. Также вместе с ним могут быть сгенерированы конструктор копирования, оператор присваивания и деструктор. Деструктор генерируется виртуальным, если деструктор базового класса виртуален (разумеется если базовый класс вообще существует), про копирующий конструктор прочитай вот тут.

Добавлено через 1 минуту и 34 секунды
Цитата(Killer_13 @  30.4.2010,  16:35 Найти цитируемый пост)
Так вот напрашивается вопрос, а не проще ли с самого начала задать начальные значения элементов данных класса?

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


Опытный
**


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

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



azesmcar
тоже самое подумал про конструктор по умолчанию, но думал не писать =)
Вот только не понятно зачем с самого начала задавать значения, надобность класса тогда стремится к нулю.
PM MAIL   Вверх
Killer_13
Дата 30.4.2010, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Воть, - первая ссылка в гугле.
Цитата

Конструкторы и деструкторы представляют собой специальные функции класса, которые ваша программа автоматически вызывает при создании или уничтожении объекта. Большинство программ используют конструктор для инициализации элементов данных класса. Простые программы, создаваемые сейчас вами, вероятно, не потребуют использования деструктора. Из урока 24 вы узнаете, как перегружать операторы. Другими словами, вы можете переопределить символ плюс таким образом, что он будет добавлять содержимое одной строки к другой. Как вы уже знаете, тип (например,  char, float и int) определяет набор значений, которые может хранить переменная, и набор операций, которые ваши программы могут выполнять над этой переменной. Когда вы определяете класс, вы по существу определяете тип. C++ позволяет вам указать, как ведут себя операторы с данным типом. До изучения урока 24 убедитесь, что освоили следующие основные концепции:

         1. Конструктор представляет собой специальную функцию, которую ваша программа автоматически вызывает каждый раз при создании объекта. Конструктор имеет такое же имя, как и класс объекта.
         2. Конструктор не имеет возвращаемого значения, но вы не указываете ему тип void. Вместо этого вы просто не указываете возвращаемое значение вообще.
         3. Когда ваша программа создает объект, она может передать параметры конструктору во время объявления объекта.
         4. C++ позволяет вам перегружать конструкторы и разрешает использовать значения по умолчанию для параметров.
         5. Деструктор представляет собой специальную функцию, которую ваша программа вызывает автоматически каждый раз при уничтожении объекта. Деструктор имеет такое же имя, как и класс объекта, но его имя предваряется символом тильды (~).


вот, к примеру, - вот так через конструктор.

Код

сlass CMyClass
{
  public:
    CMyClass();  // Конструктор класса CMyClass
    ~CMyClass();   // Деструктор класса CMyClass
private:
   int MyInt;  // переменная типа integer (целое число)
   int *point; // переменная типа указатель на integer (целое число)
};

CMyClass::CMyClass()  // Конструктор
{
MyInt=10;   // На этапе инициализации объекта класса CMyClass присваиваем 
                    // переменной этого объекта MyInt значение 10
// а почему нельзя присвоить это начальное значение сразу???! Я это имел введу.

point = new int; // Выделяем блок памяти под целое число, на которое 
                          // будет указывать указатель
*point = 20;      //  Сохраняем в этот выделенный блок памяти число 20
}

CMyClass::~CMyClass()  // Деструктор
{
MyInt=0;   // Объект класса CMyClass уже фактически прекратил существование,
                  // но мы присваиваем переменной класса MyInt значение 0

delete point; // Используем указатель на число для того, чтобы освободить
                    // блок памяти, выделенный под это число.
                    // Если мы этого здесь не сделаем, никто за нас это не сделает
}




PM MAIL   Вверх
azesmcar
Дата 30.4.2010, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



Killer_13

можно static -и так инициализировать
Код

struct test
{
    const static int a = 1;
};

а для обычных членов класса - для того и существует конструктор, т.е. мне непонятно чем тебе этот способ не нравиться? По любому где-то нужно это писать.
PM   Вверх
Killer_13
Дата 30.4.2010, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Нет, - мне не то что не нравиться. Просто интересуюсь. Для чего усложнять код, если можно в самом начале написать 

Код

int MyInt = 10;


и для чего обязательно static?

Ничего плохого, просто разбираюсь для себя, - расставляю по полкам, не придираюсь ни к чему и ничего не доказываю. smile

Спасибо.
PM MAIL   Вверх
mes
Дата 30.4.2010, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(Killer_13 @  30.4.2010,  16:17 Найти цитируемый пост)
/ а почему нельзя присвоить это начальное значение сразу???! Я это имел введу.

ну хотя бы потому что констукторов может быть несколько, и каждый может инициализировать дата-член разными значениями.


--------------------
PM MAIL WWW   Вверх
Killer_13
Дата 30.4.2010, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



kemiisto
а если изменить чуток смысл, я сейчас доглядел, что неправильно написал - уже не будет БРЕД? smile

Цитата

Насколько я понимаю конструктор создается автоматически при создании обьекта класса. Эт понятно.


на

Цитата

Насколько я понимаю конструктор вызывается автоматически при создании обьекта класса. Эт понятно.

PM MAIL   Вверх
mes
Дата 30.4.2010, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(Killer_13 @  30.4.2010,  16:27 Найти цитируемый пост)
и для чего обязательно static?

не только статик но и конст, но это для особых целей, так что не забивайте пока голову..



--------------------
PM MAIL WWW   Вверх
Killer_13
Дата 30.4.2010, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ок не буду забивать. smile, я просто хотел уточнить, можно ли и без статик и без конст, просто например тип инт.
PM MAIL   Вверх
mes
Дата 30.4.2010, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



нельзя 



--------------------
PM MAIL WWW   Вверх
azesmcar
Дата 30.4.2010, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



Цитата(Killer_13 @  30.4.2010,  17:27 Найти цитируемый пост)
Нет, - мне не то что не нравиться. Просто интересуюсь. Для чего усложнять код, если можно в самом начале написать 

В C# так можно.
PM   Вверх
Killer_13
Дата 30.4.2010, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Понятненько, спасибо. Мне бы с С++ разобраться :(

PM MAIL   Вверх
azesmcar
Дата 30.4.2010, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



Цитата(Killer_13 @  30.4.2010,  20:16 Найти цитируемый пост)
Понятненько, спасибо. Мне бы с С++ разобраться :(

я просто хочу сказать что идея имеет право на жизнь, во всяком случае в микрософт так считают smile 
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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