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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 38, средняя оценка - 4.74
DarkSwan
0 / 0 / 0
Регистрация: 11.10.2010
Сообщений: 17
#1

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

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

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

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

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

Определить конструкторы, деструктор - C++
Добрый день. Времени в обрез, нужна помощь доработать код. Задание: Создать класс "процессор", имеющий частоту (МГц). Определить...

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

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

Создать класс "пара целых чисел". Определить конструкторы, деструктор, функции доступа к полям - C++
Создать класс ПАРА ЦЕЛЫХ ЧИСЕЛ. Определить конструкторы, деструктор, функции доступа к полям, ввода-вывода и сравнения пар (пара p1 больше...

9
Nick Alte
Эксперт С++
1642 / 1014 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 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
0
DarkSwan
0 / 0 / 0
Регистрация: 11.10.2010
Сообщений: 17
07.01.2011, 11:35  [ТС] #3
Спасибо, но этот пример мне уже где-то попадался. Но по-прежнему непонятно, как потом выводить все полученное на печать и откуда что берется... Странная у нас система обучения, не пройдя одной важной темы, беремся за другую, а вместо лекция у нас домашнее чтение самоучителя и последующая сдача готовых лаб ((
0
МаксимМВ
C/C++
90 / 90 / 5
Регистрация: 01.07.2010
Сообщений: 281
07.01.2011, 11:37 #4
так же как и в foo() тут вызывается!!!
0
Nick Alte
Эксперт С++
1642 / 1014 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
07.01.2011, 11:38 #5
Этот пример я только что написал, так что интересно, где это он попадался... И хочу заметить, что в открывающем посте речь шла только о перечисленном - конструкторы, деструктор. Ни о каком выводе на печать чего-то "полученного" и речи не шло. Так что будьте добры в следующий раз внятно формулировать свои проблемы! Что касается foo, с тем же успехом можете заменить его на int main()
0
DarkSwan
0 / 0 / 0
Регистрация: 11.10.2010
Сообщений: 17
07.01.2011, 11:40  [ТС] #6
Прошу прощения, но голова уже кругом и поэтому могу ошибаться насчет "попадался". Значит попадалось что-то очень похожее...
0
Nick Alte
Эксперт С++
1642 / 1014 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
07.01.2011, 11:41 #7
Так что вам вообще надо-то, господин "практик" с идущей кругом головой?
0
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
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
DarkSwan
0 / 0 / 0
Регистрация: 11.10.2010
Сообщений: 17
07.01.2011, 11:52  [ТС] #9
Голова немного остыла.
Nick Alte, извините, неимоверно туплю. Разбираюсь в вашем примере - фактически становится понятно. Спасибо
0
Evg
Эксперт CАвтор FAQ
18377 / 6424 / 441
Регистрация: 30.03.2009
Сообщений: 17,818
Записей в блоге: 28
07.01.2011, 14:50 #10
Цитата Сообщение от DarkSwan Посмотреть сообщение
чтобы понять до конца принципе работы всего этого
Если тебе действительно хочется понять принципы работы, то почитай тут Конструкторы и деструкторы
Правда статья рассчитана на тех, кто хотя бы в первом приближении понимает, что такое конструктор и деструктор
0
07.01.2011, 14:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.01.2011, 14:50
Привет! Вот еще темы с ответами:

Почему создается виртуальный деструктор A, а в таблице виртуальных функций лежит деструктор B - C++
Почему я делаю виртуальным деструктор A, а в таблице виртуальных функций лежит деструктор B?

конструкторы - C++
Есть 2 проблемы: 1) Сказали сделать 2 конструктора: один по умолчанию, а другой-с параметрами. Какие должны быть параметры в моем...

Конструкторы С++ - C++
Всем привет, помогите довести программу до ума :) Заранее благодарю откликнувшихся :) ...

Конструкторы - C++
У меня есть два конструктора: первый по умолчанию Circle() //Конструктор по умолчанию (инициализирует переменные) { itsRadius =...


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

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

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