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

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

Войти
Регистрация
Восстановить пароль
 
~B~
6 / 6 / 0
Регистрация: 12.06.2011
Сообщений: 80
#1

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

21.02.2013, 16:16. Просмотров 591. Ответов 7
Метки нет (Все метки)

Зачем нужны конструкторы? Читаю в книгах, смотрю видеоуроки и все равно не понятно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.02.2013, 16:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Объясните зачем нужны конструкторы (C++):

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

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

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

Зачем биты нужны это меньше байтов но int 32 бита но я не допер зачем это нужно это 4 байта то есть int не может больше 4 байт весить? - C++
Вот еще один вопрос зачем биты нужны это меньше байтов но int 32 бита но я не допер зачем это нужно это 4 байта то есть int не может...

Зачем нужны сортировки - C++
Скажите пожалуйста, зачем при подготовке к олимпиаде по программированию, нужно учить алгоритмы: Быстрая сортировка, сортировка пузырьком и...

Зачем нужны операторы << и >> - C++
В книжке Дейтлов есть код http://pic.ipicture.ru/uploads/091222/thumbs/q1TZw4n1JQ.jpg Вопрос в том, что там где написано, что числа...

7
BumerangSP
4286 / 1408 / 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;
0
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 раз параметры какие либо.
1
StasGamilton
Эксперт по пяченькам
67 / 67 / 1
Регистрация: 16.08.2011
Сообщений: 258
21.02.2013, 16:59 #4
Цитата Сообщение от MrGrig Посмотреть сообщение
т.е. конструкторы нужны чтобы не задавать по 350 раз параметры какие либо.
Это не суть конструктора.

Добавлено через 3 минуты
У меня лично были случаи, когда лучшим решением было задавать параметры вне конструктора. Внутри конструктора я задавал только значения по умолчанию.
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6486 / 3130 / 307
Регистрация: 04.12.2011
Сообщений: 8,644
Записей в блоге: 5
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;//освободили память
}
0
Kastaneda
21.02.2013, 18:13
  #6

Не по теме:

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

1
Croessmah
Эксперт CЭксперт С++
13419 / 7573 / 855
Регистрация: 27.09.2012
Сообщений: 18,646
Записей в блоге: 3
Завершенные тесты: 1
21.02.2013, 19:05 #7
А еще только в конструкторе можно инициализировать константные члены класса
2
Kastaneda
Форумчанин
Эксперт С++
4655 / 2863 / 228
Регистрация: 12.12.2009
Сообщений: 7,275
Записей в блоге: 2
Завершенные тесты: 1
21.02.2013, 19:05 #8
и ссылки.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.02.2013, 19:05
Привет! Вот еще темы с ответами:

Зачем нужны исключения? - C++
Добрый вечер, прочитал статью об исключениях, не очень понимаю, почему бы не заменить их просто оператором if? Вот код с исключением: ...

Зачем нужны классы? - C++
Изучаю СИ++ после изучения СИ. Не пойму какой смысл в классах. То что они делают можно реализовать с помощью функций, структур и обычных...

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

Зачем нужны макросы? - C++
Зачем нужны макросы?


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

Или воспользуйтесь поиском по форуму:
8
Yandex
Объявления
21.02.2013, 19:05
Ответ Создать тему
Опции темы

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