14. Инициализация, присваивание и уничтожение класса
14. Инициализация, присваивание и уничтожение класса
В этой главе мы детально изучим автоматическую инициализацию, присваивание и уничтожение объектов классов в программе. Для поддержки инициализации служит конструктор - определенная проектировщиком функция (возможно, перегруженная), которая автоматически применяется к каждому объекту класса перед его первым использованием. Парная по отношению к конструктору функция, деструктор, автоматически применяется к каждому объекту класса по окончании его использования и предназначена для освобождения ресурсов, захваченных либо в конструкторе класса, либо на протяжении его жизни.
По умолчанию как инициализация, так и присваивание одного объекта класса другому выполняются почленно, т.е. путем последовательного копирования всех членов. Хотя этого обычно достаточно, при некоторых обстоятельствах такая семантика оказывается неадекватной. Тогда проектировщик класса должен предоставить специальный копирующий конструктор и копирующий оператор присваивания. Самое сложное в поддержке этих функций-членов - понять, что они должны быть написаны.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Уничтожение программы
Уничтожение программы Любой объект на уровне MI, который можно создать, можно и уничтожить. Соответственно на каждую команду создания объектов MI приходится команда уничтожения. Пользователь на уровне MI устанавливает системный указатель на программу или другой объект MI и
Уничтожение cookies: забудь, кто я
Уничтожение cookies: забудь, кто я Как вам известно, вся информация о вас прописывается в cookies-файлах. Вы попадаете на файлообменный сервис, и сервер с радостью узнает (помимо IP), что вот он, юзер с логином User12345678 и паролем qwerty. Не дам ему качать, алчному хапуге, у меня в логах
Уничтожение
Уничтожение Допустим, вы обнаружили, что ваш компьютер кишмя кишит всевозможными вирусами. Что делать?– Ни в коем случае не поддавайтесь панике! Наверное, ни один вирус не сможет натворить столько бед, сколько смогут дрожащие руки перепуганного пользователя. Поэтому
5.12.1 Присваивание сети адресов класса A
5.12.1 Присваивание сети адресов класса A Некоторые очень большие организации имеют адреса класса А. В этом случае при регистрации присваивается фиксированное значение первого октета адреса, а три оставшихся октета администрируются внутри самой организации. Например,
5.12.2 Присваивание сети адресов класса В
5.12.2 Присваивание сети адресов класса В Зарегистрированное авторство на адреса позволяет присвоить фиксированное значение первым двум октетам в адресе класса B. Последние два октета администрируются в пределах самой организации. Например, следующие адреса и имена
5.12.3 Присваивание сетям адресов класса С
5.12.3 Присваивание сетям адресов класса С Организациям с небольшими сетями, которым требуются глобально уникальные адреса, предоставляются адреса класса С. Это означает, что регистрационное авторство присваивается на три первых октета полного адреса организации. Сама
3.1.3. Уничтожение процесса
3.1.3. Уничтожение процесса Для уничтожения процесса предназначена команда kill. Ей достаточно указать идентификатор требуемого процесса.Команда kill посылает процессу сигнал SIGTERM, являющийся запросом на завершение.[10] По умолчанию, если в программе отсутствует обработчик
7.9.2. Инициализация и присваивание
7.9.2. Инициализация и присваивание Вспомним, что имя массива без указания индекса элемента интерпретируется как адрес первого элемента. Аналогично имя функции без следующих за ним скобок интерпретируется как указатель на функцию. Например, при вычислении
14.1. Инициализация класса
14.1. Инициализация класса Рассмотрим следующее определение класса:class Data {public:int ival;char *ptr;};Чтобы безопасно пользоваться объектом класса, необходимо правильно инициализировать его члены. Однако смысл этого действия для разных классов различен. Например, может ли ival
14.6.1. Инициализация члена, являющегося объектом класса
14.6.1. Инициализация члена, являющегося объектом класса Что произойдет, если в объявлении _name заменить C-строку на тип класса string? Как это повлияет на почленную инициализацию по умолчанию? Как надо будет изменить явный копирующий конструктор? Мы ответим на эти вопросы в
17.6. Почленная инициализация и присваивание A
17.6. Почленная инициализация и присваивание A При проектировании класса мы должны позаботиться о том, чтобы почленная инициализация (см. раздел 14.6) и почленное присваивание (см. раздел 14.7) были реализованы правильно и эффективно. Рассмотрим связь этих операций с
Уничтожение томатов
Уничтожение томатов К сожалению, в данный момент при столкновении сыра с помидорами ничего не происходит. Ситуацию надо исправить при помощи кода, добавленного в метод updatePosition, который приведен в листинге 11.30.Листинг 11.30// Уничтожаем помидоры при столкновении с сыромfor (int
6.6 Присваивание и Инициализация
6.6 Присваивание и Инициализация Рассмотрим очень простой класс строк string:struct string (* char* p; int size; // размер вектора, на который указывает pstring(int sz) (* p = new char[size=sz]; *) ~string() (* delete p; *) *);Строка – это структура данных, состоящая из вектора сиволов и длины этого вектора. Вектор