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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 38, средняя оценка - 4.74
DarkSwan
0 / 0 / 0
Регистрация: 11.10.2010
Сообщений: 17
07.01.2011, 11:25     Конструкторы и деструктор #1
Здравствуйте. Мне нужно написать маленькую и простую программу, имеющую конструкторы: инициализирующий, по умолчанию, копирующий и деструктор.
Мною уже перелопачено много литературы и форумов, но нигде не могу найти пример программы с комментами, чтобы понять до конца принципе работы всего этого. Везде либо только как задаются конструкторы или вообще все кусками и ничего толком не понятно. Хотелось бы посмотреть на готовый код с main и т.д, чтобы понять, как вообще на деле вызываются эти конструкторы.
P.S. я практик, а не теоретик, мне проще разобраться в проге с комментами, чем пытаться что-то понять по теории (теории и так уже много прочитано, но что-то почти безрезультатно).
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.01.2011, 11:25     Конструкторы и деструктор
Посмотрите здесь:

Конструкторы C++
C++ Определить конструкторы, деструктор
Конструкторы C++
C++ Конструкторы
C++ Конструкторы и деструктор
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
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
DarkSwan
0 / 0 / 0
Регистрация: 11.10.2010
Сообщений: 17
07.01.2011, 11:35  [ТС]     Конструкторы и деструктор #3
Спасибо, но этот пример мне уже где-то попадался. Но по-прежнему непонятно, как потом выводить все полученное на печать и откуда что берется... Странная у нас система обучения, не пройдя одной важной темы, беремся за другую, а вместо лекция у нас домашнее чтение самоучителя и последующая сдача готовых лаб ((
МаксимМВ
C/C++
90 / 90 / 5
Регистрация: 01.07.2010
Сообщений: 281
07.01.2011, 11:37     Конструкторы и деструктор #4
так же как и в foo() тут вызывается!!!
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
07.01.2011, 11:38     Конструкторы и деструктор #5
Этот пример я только что написал, так что интересно, где это он попадался... И хочу заметить, что в открывающем посте речь шла только о перечисленном - конструкторы, деструктор. Ни о каком выводе на печать чего-то "полученного" и речи не шло. Так что будьте добры в следующий раз внятно формулировать свои проблемы! Что касается foo, с тем же успехом можете заменить его на int main()
DarkSwan
0 / 0 / 0
Регистрация: 11.10.2010
Сообщений: 17
07.01.2011, 11:40  [ТС]     Конструкторы и деструктор #6
Прошу прощения, но голова уже кругом и поэтому могу ошибаться насчет "попадался". Значит попадалось что-то очень похожее...
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
07.01.2011, 11:41     Конструкторы и деструктор #7
Так что вам вообще надо-то, господин "практик" с идущей кругом головой?
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
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 привел хороший пример с описанием вызовов.
DarkSwan
0 / 0 / 0
Регистрация: 11.10.2010
Сообщений: 17
07.01.2011, 11:52  [ТС]     Конструкторы и деструктор #9
Голова немного остыла.
Nick Alte, извините, неимоверно туплю. Разбираюсь в вашем примере - фактически становится понятно. Спасибо
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.01.2011, 14:50     Конструкторы и деструктор
Еще ссылки по теме:

C++ Почему создается виртуальный деструктор A, а в таблице виртуальных функций лежит деструктор B
C++ Создать класс "пара целых чисел". Определить конструкторы, деструктор, функции доступа к полям

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

Или воспользуйтесь поиском по форуму:
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16832 / 5253 / 322
Регистрация: 30.03.2009
Сообщений: 14,145
Записей в блоге: 26
07.01.2011, 14:50     Конструкторы и деструктор #10
Цитата Сообщение от DarkSwan Посмотреть сообщение
чтобы понять до конца принципе работы всего этого
Если тебе действительно хочется понять принципы работы, то почитай тут Конструкторы и деструкторы
Правда статья рассчитана на тех, кто хотя бы в первом приближении понимает, что такое конструктор и деструктор
Yandex
Объявления
07.01.2011, 14:50     Конструкторы и деструктор
Ответ Создать тему
Опции темы

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