- •5.Препроцессор. Директивы препроцессора.
- •7.Работа с файлами. Текстовый и двоичный режим.
- •8.Указатели. Адресная арифметика.
- •10.Перечислимый тип. Структуры. Объединения.
- •11.Поразрядные операции.
- •13.Спецификаторы класса памяти.
- •14.Пространства имён.
- •15.Компоновка. Правило одного определения.
- •17.Функции-члены класса. Указатель this.
- •16.Понятие класса.
- •18.Конструкторы. Деструкторы.
- •19.Преобразования объектов класса.
- •20.Доступ к членам класса.
- •21.Статические члены класса.
- •22.Друзья класса.
- •23.Совместное использование.
- •24.Перегрузка операций.
- •25.Шаблоны.
- •26.Обработка исключительных ситуаций.
- •27.Производные классы.
- •28.Виртуальные функции. Абстрактные классы.
- •29.Указатели на члены класса.
- •30.Множественное наследование.
- •31.Структура dll-библиотеки.
- •32.Статическое и динамическое подключение dll-библиотек.
- •34.Регистры процессора.
- •35.Использование стека. Команды работы со стеком в языке ассемблера.
- •36.Арифметические команды в языке ассемблера.
- •37.Команды сравнения и перехода в языке ассемблера.
- •38.Команды работы с битами в языке ассемблера.
- •39.Процедуры в языке ассемблера. Передача параметров в процедуру.
- •40.Процедуры в языке ассемблера. Возврат результата. Локальные данные.
18.Конструкторы. Деструкторы.
Конструкторы Функция-член класса с тем же именем, что и у класса, называется конструктором. Она используется для построения объектов этого класса. Конструктор не должен возвращать никакого значения, даже void.
class Complex
{ private: double r, m; public: Complex(double r, double m) : r(r), m(m) {} ... };
Если класс имеет конструктор, все объекты этого класса будут проинициализированы. Если конструктору требуются параметры, они должны быть предоставлены.Когда для класса объявлен конструктор, нельзя пользоваться списком инициализации в качестве инициализатора.
Конструктор умолчания класса Х – это конструктор класса Х, вызываемый без параметров. Конструктор умолчания обычно имеет вид Х::Х(), однако и конструктор, который может вызываться без параметров, потому что имеет параметры с умолчанием, например, Х::Х(int = 0), также считается конструктором умолчания. При отсутствии других объявленных конструкторов, конструктор умолчания генерируется компилятором.
class Complex
{ private: double r, m; public: Complex() : r(0), m(0) {} ... };
Complex x; // Вызов конструктора умолчания
class Complex { private: double r, m; public: Complex(double nr = 0, double nm = 0) : r(nr), m(nm) {} ... };
Complex y1(-6, 3); // Вызов конструктора с параметрами
Complex y2; // Конструктор вызывается как конструктор умолчания
Конструктор копирования для класса Х – это конструктор, который может быть вызван для копирования объекта класса Х, т.е. такой конструктор, который может быть вызван с одним параметром – ссылкой на объект класса Х. Например, X::X(const X&) и X::X(X&, int = 0) являются конструкторами копирования.При отсутствии объявленных конструкторов копирования компилятор генерирует публичныйконструктор копирования. Генерируемый конструктор копирования выполняет побитовое копирование объекта. Этот метод годится лишь при отсутствии в объекте указателей, которые хранят адреса динамически распределенной памяти. Сгенерированный конструктор скопирует адрес, а не содержимое памяти, таким образом, два разных объекта будут ссылаться на один и тот участок памяти и меняться синхронно, что не является ожидаемым поведением. В таком случае программист обязательно должен сам написать конструктор копирования, который будет, в частности, копировать содержимое динамически распределённой памяти.Конструктор копирования – и определяемый пользователем, и генерируемый компилятором – используется:
при инициализации переменных;
при передаче аргументов;
при возврате значения из функции;
при обработке исключений.
Семантика этих операций по определению совпадает с семантикой инициализации.
Complex x = 2; // Создает Complex(2), затем копирует его в x
Complex y = Complex(2, 0); // Создает Complex(2, 0), затем копирует его в у
Деструкторы Функция-член класса Х с именем ~Х называется деструктором. Она используется для разрушения значения класса Х непосредственно перед разрушением содержащего его объекта. Деструктор не имеет параметров и возвращаемого типа, нельзя задавать даже void.Деструкторы автоматически вызываются, когда
автоматический или временный объект уходит из области действия;
завершается программа (для статически сконструированных объектов);
используется операция delete для объектов размещенных операцией new.
Деструктор может также вызываться явным образом.
class X
{ private:
int n;
public:
X();
~X(); };
X xx;
xx.~X(); // Явный вызов деструктора
