Чтение онлайн

на главную - закладки

Жанры

Освой самостоятельно С++ за 21 день.

Либерти Джесс

Шрифт:

Если вы не объявите конструктор или деструктор, то компилятор сделает это за вас. Стандартные конструктор и деструктор не принимают аргументов и не выполняют никаких действий.

Вопросы и ответы: Конструктор называется стандартным из-за отсутствия аргументов или из-за того, что создается компилятором в том случае, если в классе не объявляется никакой другой конструктор?

Стандартный конструктор, или конструктор по умолчанию, характеризуется тем, что не принимает никаких аргументов,

причем неважно, создан ли этот конструктор автоматически компилятором или самим программистом. Стандартный конструктор всегда используется по умолчанию.

Однако что касается деструкторов, то тут есть свои отличия. Стандартный деструктор предоставляется компилятором. Поскольку все деструкторы не имеют параметров, то главной отличительной чертой стандартного деструктора является то, что он не выполняет никаких действий, т.е. имеет пустое тело функции.

Использование конструктора, заданного по умолчанию

Какая же польза от конструктора, который ничего не выполняет? Зачастую это нужно только для протокола. Все объекты должны быть локализованы в программе, поэтому их создание и удаление сопровождается вызовом соответствующей функции, которая при этом может ничего и не делать. Так, для объявления объекта без передачи параметров, например:

Cat Rags; // Rags не получает никаких параметров

необходимо иметь следующий конструктор:

Cat;

Конструктор вызывается при определении объекта класса. Если для создания объекта класса Cat следует передать два параметра, то конструктор класса Cat определяется следующим образом:

Cat Frisky (5,7);

Если конструктор принимает один параметр, определение объекта будет иметь следующий вид:

Cat Frisky (3);

В случае, когда конструктор вообще не принимает параметров (т.е. является стандартным), отпадает необходимость использования круглых скобок:

Cat Frisky;

Этот случай является исключением из правила, гласящего, что все функции требуют наличия круглых скобок, даже если они вовсе не принимают параметров. Вот почему можно спокойно записать такое определение:

Cat Frisky;

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

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

свой стандартный конструктор телом функции, в котором будет выполняться инициализация класса.

Чтобы придать законченность своему труду, при объявлении конструктора не забудьте объявить и деструктор, даже если вашему деструктору нечего делать. И хотя справедливо то, что и стандартный конструктор будет корректно работать, отнюдь не повредит объявить собственный деструктор. Это сделает вашу программу более ясной.

В листинге 6.4 в знакомый уже вам класс Cat добавлены конструктор и деструктор. Конструктор используется для инициализации объекта Cat и установки его возраста равным предоставляемому вами значению. Обратите внимание на то, в каком месте программы вызывается деструктор.

Листинг 6.4. Использование конструкторов и деструкторов.

1: // Пример объявления конструктора и

2: // деструктора в классе Cat

3:

4: #include <iostream.h> // для объекта cout

5:

6: class Cat // начало объявления класса

7: {

8: public: // начало открытого раздела

9: Cat(int initialAge); // конструктор

10: ~Cat; //деструктор

11: int GetAge; // метод доступа

12: void SetAge(int age); // метод доступа

13: void Meow;

14: private: // начало закрытого раздела

15: int itsAge; // переменная-член

16: };

17:

18: // конструктор класса Cat

19: Cat::Cat(int initialAge)

20: {

21: itsAge = initialAge;

22: }

23:

24: Cat::~Cat // деструктор, не выполняющий действий

25: {

26: }

27:

28: // GetAge, открытая функция обеспечения доступа,

29: // возвращает значение переменной-члена itsAge

30: int Cat::GetAge

31: {

32: return itsAge;

33: }

34:

35: // Определение SetAge, открытой

36: // функции обеспечения доступа

37:

38: voidCat::SetAge(int age)

39: {

40: // устанавливаем переменную-член itsAge равной

41: // значению, переданному параметром age

42: itsAge = age;

43: }

44:

45: // Определение метода Meow

46: // возвращает void

47: // параметров нет

48: // используется для вывода на экран текста "Meow"

49: void Cat::Meow

50: {

51: cout << "Meow.\n";

52: }

53:

54: // Создаем виртуальную кошку, устанавливаем ее возраст, разрешаем

55: // ей мяукнуть, сообщаем ее возраст, затем снова "мяукаем" и изменяем возраст кошки.

56: int main

57: {

58: Cat Frisky(5);

59: Frisky.Meow;

60: cout << "Frisky is а cat who is ";

61: cout << Frisky.QetAge << " years old.\n";

62: Frisky.Meow;

63: Frisky.SetAge(7);

64; cout << "Now Frisky is ";

65: cout << Frisky. GeMje << " years old.\n";

66: return 0;

Поделиться:
Популярные книги

Попаданка в семье драконов

Свадьбина Любовь
Попаданка в академии драконов
Любовные романы:
любовно-фантастические романы
7.37
рейтинг книги
Попаданка в семье драконов

Вамп

Парсиев Дмитрий
3. История одного эволюционера
Фантастика:
рпг
городское фэнтези
постапокалипсис
5.00
рейтинг книги
Вамп

Таня Гроттер и Исчезающий Этаж

Емец Дмитрий Александрович
2. Таня Гроттер
Фантастика:
фэнтези
8.82
рейтинг книги
Таня Гроттер и Исчезающий Этаж

Гримуар темного лорда IX

Грехов Тимофей
9. Гримуар темного лорда
Фантастика:
попаданцы
альтернативная история
аниме
фэнтези
5.00
рейтинг книги
Гримуар темного лорда IX

Барин-Шабарин

Гуров Валерий Александрович
1. Барин-Шабарин
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Барин-Шабарин

Орден Багровой бури. Книга 1

Ермоленков Алексей
1. Орден Багровой бури
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Орден Багровой бури. Книга 1

Русь. Строительство империи 2

Гросов Виктор
2. Вежа. Русь
Фантастика:
попаданцы
альтернативная история
рпг
5.00
рейтинг книги
Русь. Строительство империи 2

Сумеречный Стрелок 3

Карелин Сергей Витальевич
3. Сумеречный стрелок
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Сумеречный Стрелок 3

Дракон с подарком

Суббота Светлана
3. Королевская академия Драко
Любовные романы:
любовно-фантастические романы
6.62
рейтинг книги
Дракон с подарком

Прометей: каменный век II

Рави Ивар
2. Прометей
Фантастика:
альтернативная история
7.40
рейтинг книги
Прометей: каменный век II

Аристократ из прошлого тысячелетия

Еслер Андрей
3. Соприкосновение миров
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Аристократ из прошлого тысячелетия

Инквизитор Тьмы 5

Шмаков Алексей Семенович
5. Инквизитор Тьмы
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Инквизитор Тьмы 5

Сердце для стража

Каменистый Артем
5. Девятый
Фантастика:
фэнтези
боевая фантастика
9.20
рейтинг книги
Сердце для стража

Законы Рода. Том 9

Flow Ascold
9. Граф Берестьев
Фантастика:
городское фэнтези
попаданцы
аниме
дорама
фэнтези
фантастика: прочее
5.00
рейтинг книги
Законы Рода. Том 9