- •Часть 1:
- •Имена, их области существования и видимости.
- •Объявления и определения.
- •Атрибуты компоновки имен.
- •Использование имен на различных стадиях создания программ.(спросить)
- •Объекты, их типы и классы памяти.
- •Имена типов данных. (спросить)
- •Встроенные и составные типы данных. Квалификатор const.
- •Рекурсивный вызов функций. Тип «указатель на функцию» (спросить). 82
- •Перегрузка функций.
- •Шаблоны функций.
- •Часть 2:
- •Процедурное и объектно-ориентированное программирование.
- •Понятие класса.
- •Работа с this.
- •Конструкторы и деструкторы, их вызов.
- •Уровни доступа. Использование дружественных классов.
- •Перегрузка операций.
- •Абстрактные базовые классы.
- •Шаблоны классов.
- •Часть 3:
- •Множественное наследование.
- •Явные преобразования static_cast, dynamic_cast.
- •Обработка исключительных ситуаций.
Определение и реализация класса.
Члены-данные и члены-методы классов.
Работа с this.
Указатель this. Каждый объект содержит свой экземпляр полей класса. Методы класса находятся в памяти в единственном экземпляре и используются всеми объектами совместно, поэтому необходимо обеспечить работу методов с полями именно того объекта, для которого они были вызваны. Это обеспечивается передачей в функцию скрытого параметра this, в котором хранится константный указатель на вызвавший функцию объект. Указатель this неявно используется внутри метода для ссылок на элементы объекта. В явном виде этот указатель применяется в основном для возвращения из метода указателя (return this;) или ссылки (return *this;) на вызвавший объект.
Создание и использование объектов классов.
Конструкторы и деструкторы, их вызов.
Конструктор предназначен для инициализации объекта и вызывается автоматически при его создании.
□ Конструктор не возвращает значение, даже типа void. Нельзя получить указатель на конструктор.
□ Класс может иметь несколько конструкторов с разными параметрами для разных видов инициализации (при этом используется механизм перегрузки).
□ Конструктор, вызываемый без параметров, называется конструктором по умолчанию.
□ Параметры конструктора могут иметь любой тип, кроме этого же класса. Можно задавать значения параметров по умолчанию. Их может содержать только один из конструкторов.
□ Если программист не указал ни одного конструктора, компилятор создает его автоматически. Такой конструктор вызывает конструкторы по умолчанию для полей класса и конструкторы по умолчанию базовых классов. В случае, когда класс содержит константы или ссылки, при попытке создания объекта класса будет выдана ошибка, поскольку их необходимо инициализировать конкретными значениями, а конструктор по умолчанию этого делать не умеет.
□ Конструкторы не наследуются.
□ Конструкторы нельзя описывать с модификаторами const, virtual и static.
□ Конструкторы глобальных объектов вызываются до вызова функции main. Локальные объекты создаются, как только становится активной область их действия. Конструктор запускается и при создании временного объекта (например, при передаче объекта из функции).
Перегружать можно не только конструкторы, но и другие методы класса.
Существует еще один способ инициализации полей в конструкторе:
monstr::monstr(int he. int am):health (he), ammo (am), skin (red), name (0){}
Конструктор не может возвратить значение, чтобы сообщить об ошибке во время инициализации. Для этого можно использовать механизм обработки исключительных ситуаций.
Конструктор копирования — это специальный вид конструктора, получающий в качестве единственного параметра указатель на объект этого же класса:1
Т: :T(const Т&) { _ /* Тело конструктора, */ }
где Т — имя класса.
Этот конструктор вызывается в тех случаях, когда новый объект создается путем копирования существующего:
□ при описании нового объекта с инициализацией другим объектом;
□ при передаче объекта в функцию по значению;
□ при возврате объекта из функции1.
Если программист не указал ни одного конструктора копирования, компилятор создает его автоматически.
Деструктор — это особый вид метода, применяющийся для освобождения памяти, занимаемой объектом. Деструктор вызывается автоматически, когда объект выходит из области видимости:
□ для локальных объектов — при выходе из блока, в котором они объявлены;
□ для глобальных — как часть процедуры выхода из main;
□ для объектов, заданных через указатели, деструктор вызывается неявно при использовании операции delete.
Автоматический вызов деструктора объекта при выходе из области действия указателя на него не производится.
Имя деструктора начинается с тильды (~), непосредственно за которой следует имя класса. Деструктор:
□ не имеет аргументов и возвращаемого значения;
□ не может быть объявлен как const или static;
□ не наследуется;
□ может быть виртуальнымю.
Если деструктор явным образом не определен, компилятор автоматически создаёт пустой деструктор.
Описывать в классе деструктор явным образом требуется в случае, когда объект содержит указатели на память, выделяемую динамически — иначе при уничтожении объекта память, на которую ссылались его поля-указатели, не будет помечена как свободная. Указатель на деструктор определить нельзя.
Конструкторов может быть сколько угодно, деструктор – 1.