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

Объясните зачем нужны конструкторы - C++

Восстановить пароль Регистрация
 
~B~
 Аватар для ~B~
6 / 6 / 0
Регистрация: 12.06.2011
Сообщений: 80
21.02.2013, 16:16     Объясните зачем нужны конструкторы #1
Зачем нужны конструкторы? Читаю в книгах, смотрю видеоуроки и все равно не понятно
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
21.02.2013, 16:25     Объясните зачем нужны конструкторы #2
Для инициализации переменных внутри класса.

Добавлено через 2 минуты
Пример:
C++
1
2
3
4
5
class a
{
        int i;
public:
};
Чтобы дать какое-то значение переменной i, можно его присвоить в конструкторе.
Так, например:
C++
1
2
3
4
5
6
class a
{
        int i;
public:
        a(): i(10) {}  //конструктор по умолчанию (без параметров)
};
i будет равно 10;
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
21.02.2013, 16:37     Объясните зачем нужны конструкторы #3
Цитата Сообщение от BumerangSP Посмотреть сообщение
Для инициализации переменных внутри класса.

Добавлено через 2 минуты
Пример:
C++
1
2
3
4
5
class a
{
        int i;
public:
};
Чтобы дать какое-то значение переменной i, можно его присвоить в конструкторе.
Так, например:
C++
1
2
3
4
5
6
class a
{
        int i;
public:
        a(): i(10) {}  //конструктор по умолчанию (без параметров)
};
i будет равно 10;
это не объясняет суть конструкторов =)
смысл вот какой
если ты инициализируешь переменную типа int скажем вот так

C++
1
int a;
внутри неё сейчас находится мусор.
а если инициализировать класс, пример вверху.

C++
1
a myclass;
то у этого объекта переменная i уже будет равна 10. т.е. конструкторы нужны чтобы не задавать по 350 раз параметры какие либо.
StasGamilton
Эксперт по пяченькам
 Аватар для StasGamilton
67 / 67 / 1
Регистрация: 16.08.2011
Сообщений: 258
21.02.2013, 16:59     Объясните зачем нужны конструкторы #4
Цитата Сообщение от MrGrig Посмотреть сообщение
т.е. конструкторы нужны чтобы не задавать по 350 раз параметры какие либо.
Это не суть конструктора.

Добавлено через 3 минуты
У меня лично были случаи, когда лучшим решением было задавать параметры вне конструктора. Внутри конструктора я задавал только значения по умолчанию.
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6157 / 2886 / 281
Регистрация: 04.12.2011
Сообщений: 7,682
Записей в блоге: 3
21.02.2013, 17:18     Объясните зачем нужны конструкторы #5
Цитата Сообщение от ~B~ Посмотреть сообщение
Зачем нужны конструкторы? Читаю в книгах, смотрю видеоуроки и все равно не понятно
~B~, ещё можно бы добавить, что конструкторы могут выделять память, а деструктор может её освобождать.
Чаще всего, говорят, что конструкторы не выделяют, а инициализируют память, а выделяется она оператором new, скажем. Действительно, для приведенного примера это так и есть, при создании объекта такого класса в динамической памяти. Но часто бывает, что класс сам содержит динамические объекты, а тогда выделяет память именно он. Значения (указатели на выделенную память) возвращаются указателям - членам, так как эти указатели доступны конструктору, как методу и никакой тип возврата конструктору для этого не нужен.
То есть при наличии у класса объектов требующих выделения динамической памяти, конструктор должен её выделить, а деструктор освободить. И это не зависит от того, сам объект класса создается статически или динамически.
Пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class A {
public:
int sz;
int *mass_of_sz;
A(int _sz, int initMass);
~A();
}; 
A::A(int _sz, int initMass){
sz=_sz;
mass_of_sz=new int[sz];//выделили память
for( int i = 0; i < sz; ++i ) mass_of_sz[i]=initMass;//инициализировали чем нужно
}
A::~A(){
 delete [] mass_of_sz;//освободили память
}
Kastaneda
21.02.2013, 18:13
  #6

Не по теме:

Цитата Сообщение от IGPIGP Посмотреть сообщение
Чаще всего, говорят, что конструкторы не выделяют, а инициализируют память
Так говорят в ответ на фразу:"конструктор выделяет память под объект". Это утверждение (заблуждение) очень распространено среди начинающих.

Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11800 / 6779 / 765
Регистрация: 27.09.2012
Сообщений: 16,831
Записей в блоге: 2
Завершенные тесты: 1
21.02.2013, 19:05     Объясните зачем нужны конструкторы #7
А еще только в конструкторе можно инициализировать константные члены класса
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.02.2013, 19:05     Объясните зачем нужны конструкторы
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
21.02.2013, 19:05     Объясните зачем нужны конструкторы #8
и ссылки.
Yandex
Объявления
21.02.2013, 19:05     Объясните зачем нужны конструкторы
Ответ Создать тему
Опции темы

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