Конструкторы и деструкторы
Как следует из названий, конструктор - это метод, который строит в памяти объект данного класса, а деструктор - это метод, который его удаляет. Конструкторы и деструкторы отличаются от других объектных методов следующими особенностями:
Имеют имя, идентичное имени своего класса.
Не имеют возвращаемого значения.
Не могут наследоваться, хотя производный класс может вызывать конструкторы и деструкторы базового класса.
Автоматически генерируются компилятором как public, если не были вами объявлены иначе.
Автоматически вызываются компилятором, чтобы гарантировать надлежащее создание и уничтожение объектов классов.
Могут содержать неявные обращения к операторам new и delete, если объект требует выделения и уничтожения динамической памяти.
Данный пример демонстрирует обобщенный синтаксис объявлений конструкторов и деструктора.
class className
{
public:
// Другие члены данных className(); // Конструктор по умолчанию | className(<список параметров;-);// Конструктор с аргументами | className(const className&); // Конструктор копирования
// Другие конструкторы "className(); // Деструктор
// Другие методы };
Класс может содержать любое число конструкторов, в том числе ни одного. Конструкторы не могут быть объявлены виртуальными. Не помещайте все конструкторы в защищенной секции и старайтесь уменьшить их число, используя значения аргументов по умолчанию. Существует три вида конструкторов:
Конструктор по умолчанию не имеет параметров. Если класс не содержит ни одного конструктора, компилятор автоматически создаст один конструктор по умолчанию, который просто выделяет память при создании объекта своего класса.
Конструктор с аргументами позволяет инициализировать объект в момент его создания - вызывать различные функции, выделять динамическую память, присваивать переменным начальные значения и т.п.
Конструктор копирования предназначен для создания объектов данного класса путем копирования данных из другого, уже существующего объекта этого класса. Такие конструкторы особенно целесообразны для создания копий объектов, которые моделируют динамические структуры данных. Однако, по умолчанию компилятор создает так называемые конструкторы поверхностного копирования (shallow copy constructors), которые копируют только члены данных. Поэтому если какие-то члены данных содержат указатели, сами данные не будут копироваться. Для реализации "глубокого" копирования в код конструктора надо включить соответствующие инструкции.
Класс может объявить только один общедоступный деструктор, имени которого, идентичному имени своего класса, должен предшествовать знак ~ (тильда). Деструктор не имеет параметров и может быть объявлен виртуальным. Если класс не содержит объявления деструктора, компилятор автоматически создаст его.
Обычно деструкторы выполняют операции, обратные тем, что выполняли соответствующие конструкторы. Если вы создали объект класса файл, то в деструкторе этот файл, вероятно, будет закрываться. Если конструктор класса выделяет динамическую память для массива данных (с помощью оператора new), то деструктор, вероятно, освободит выделенную память (с помощью оператора delete) и т.п.
- Основные теоретические сведения Объявление базового класса
- Конструкторы и деструкторы
- Объявление производных классов
- Перегрузка операций
- Ключевое слово this
- Операторы new и delete.
- Потоки Выходной поток
- Встроенные типы.
- Форматированный вывод.
- Манипуляции.
- Определенный пользователем вывод.
- Входные типы, определенные пользователем.
- Простой файл Ввод/Вывод.
- Ход работы
- Задание
- Варианты задания (лр№3)
- Литература