0 / 0 / 0
Регистрация: 11.10.2010
Сообщений: 17
1

Конструкторы и деструктор

07.01.2011, 11:25. Показов 7187. Ответов 9
Метки нет (Все метки)

Здравствуйте. Мне нужно написать маленькую и простую программу, имеющую конструкторы: инициализирующий, по умолчанию, копирующий и деструктор.
Мною уже перелопачено много литературы и форумов, но нигде не могу найти пример программы с комментами, чтобы понять до конца принципе работы всего этого. Везде либо только как задаются конструкторы или вообще все кусками и ничего толком не понятно. Хотелось бы посмотреть на готовый код с main и т.д, чтобы понять, как вообще на деле вызываются эти конструкторы.
P.S. я практик, а не теоретик, мне проще разобраться в проге с комментами, чем пытаться что-то понять по теории (теории и так уже много прочитано, но что-то почти безрезультатно).
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.01.2011, 11:25
Ответы с готовыми решениями:

Конструкторы и деструктор
В общем, пишу прогу на классы. Уже написал (суть в том чтобы вывести значения диагоналей, периметра...

Конструкторы и деструктор
Дорогие форумчане! Need help! Создаю класс array. Создаю различные конструкторы. Плюс, есть...

Определить конструкторы, деструктор
Добрый день. Времени в обрез, нужна помощь доработать код. Задание: Создать класс...

Конструкторы и деструктор для списка на C++
Помогите, пожалуйста, не понимаю почему конструктор с параметрами и деструктор не работают. В...

9
Эксперт С++
1672 / 1044 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
07.01.2011, 11:32 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Test {
public:
    Test(int value): val(value) {}  // Инициализирующий конструктор, допускающий неявное преобразование
    Test(): val(0) {}  // Конструктор по умолчанию
    // Оба предыдущих конструктора по-хорошему заменяются таким:
    // Test(int value = 0): val(value) {}
    Test(const Test& src): val(src.val) {}  // Копирующий конструктор
    ~Test() {}  // Деструктор
private:
    int val;
};
 
void foo()
{
    Test t1(7);  // Вызов инициализирующего конструктора
    Test t2;  // Вызов конструктора по умолчанию
    Test t3(t1);  // Вызов копирующего конструктора
    Test t4 = t3;  // Это тоже вызов копирующего конструктора
}  // Вызов деструкторов для t4, t3, t2, t1
0
0 / 0 / 0
Регистрация: 11.10.2010
Сообщений: 17
07.01.2011, 11:35  [ТС] 3
Спасибо, но этот пример мне уже где-то попадался. Но по-прежнему непонятно, как потом выводить все полученное на печать и откуда что берется... Странная у нас система обучения, не пройдя одной важной темы, беремся за другую, а вместо лекция у нас домашнее чтение самоучителя и последующая сдача готовых лаб ((
0
C/C++
93 / 93 / 18
Регистрация: 01.07.2010
Сообщений: 281
07.01.2011, 11:37 4
так же как и в foo() тут вызывается!!!
0
Эксперт С++
1672 / 1044 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
07.01.2011, 11:38 5
Этот пример я только что написал, так что интересно, где это он попадался... И хочу заметить, что в открывающем посте речь шла только о перечисленном - конструкторы, деструктор. Ни о каком выводе на печать чего-то "полученного" и речи не шло. Так что будьте добры в следующий раз внятно формулировать свои проблемы! Что касается foo, с тем же успехом можете заменить его на int main()
0
0 / 0 / 0
Регистрация: 11.10.2010
Сообщений: 17
07.01.2011, 11:40  [ТС] 6
Прошу прощения, но голова уже кругом и поэтому могу ошибаться насчет "попадался". Значит попадалось что-то очень похожее...
0
Эксперт С++
1672 / 1044 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
07.01.2011, 11:41 7
Так что вам вообще надо-то, господин "практик" с идущей кругом головой?
0
4425 / 2364 / 853
Регистрация: 29.11.2010
Сообщений: 5,239
07.01.2011, 11:47 8
Конструкторы и деструкторы вызываются автоматически. Вы не можете произвольно вызывать конструкторы и деструкторы объектов.

Допустим, имеем класс и предыдущего примера.
Код.
C++
1
2
3
4
5
6
7
int main(int argc, char *argv[]) {
  Test a;
  Test *b;
 
  b = new Test(7);
  delete b;
}
Конструкторы вызываются автоматически при инициализации объекта -- при создании новой переменной (объекта класса) при создании динамического объекта (new). Компилятор определяет, какой конструктор вы хотите вызвать, по переменным, которые вы передаете в скобках при инициализации объекта. Обратите внимание, что при создании объекта, используя конструктор по-умолчанию, без параметров, круглые скобки не указываются, иначе "глупый компилятор" поймет это как объявление функции и изматерится весь. В примере при объявлении переменной a вызывается конструктор по-умолчанию класса Test, при объявлении переменной-указателя *b, конструктор не вызывается, он вызывается только при new Test(7), вызывая конструктор с парамером.

Деструкторы вызываются автоматически при уничтожении объекта. Уничтожение происходит, когда объект выходит за пределы видимости (в конце программы или функции, объявляющей объект) или при явном удалении динамической переменной (delete). В примере деструктор для a вызывается при окончании программы и при delete(b) для b.

Добавлено через 2 минуты
Вообще, Nick Alte привел хороший пример с описанием вызовов.
0
0 / 0 / 0
Регистрация: 11.10.2010
Сообщений: 17
07.01.2011, 11:52  [ТС] 9
Голова немного остыла.
Nick Alte, извините, неимоверно туплю. Разбираюсь в вашем примере - фактически становится понятно. Спасибо
0
Evg
Эксперт CАвтор FAQ
21265 / 8281 / 637
Регистрация: 30.03.2009
Сообщений: 22,638
Записей в блоге: 30
07.01.2011, 14:50 10
Цитата Сообщение от DarkSwan Посмотреть сообщение
чтобы понять до конца принципе работы всего этого
Если тебе действительно хочется понять принципы работы, то почитай тут Конструкторы и деструкторы
Правда статья рассчитана на тех, кто хотя бы в первом приближении понимает, что такое конструктор и деструктор
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.01.2011, 14:50
Помогаю со студенческими работами здесь

Конструкторы и деструктор класса BigInteger
Задание выглядит так. Определить класс BigInteger в файле BigInteger.h, который может быть...

Дописать в класс конструкторы и деструктор
\Дописать в класс: конструктор, считывающий массив и его размерность с клавиатуры, конструктор,...

Добавить конструкторы и деструктор struct student
При решении задачи требуется реализовать тип данных struct, соответствующий варианту...

Разработать конструкторы и деструктор для заданного класса
Разработать конструкторы и деструктор для заданного класса. Осуществить инициализацию объектов...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru