32. Ясно представляйте, какой вид класса вы создаете
32. Ясно представляйте, какой вид класса вы создаете
Резюме
Существует большое количество различных видов классов, и следует знать, какой именно класс вы создаете.
Обсуждение
Различные виды классов служат для различных целей и, таким образом, следуют различным правилам.
Классы-значения (например, std::pair, std::vector) моделируют встроенные типы. Эти классы обладают следующими свойствами.
• Имеют открытые деструктор, копирующий конструктор и присваивание с семантикой значения.
• Не имеют виртуальных функций (включая деструктор).
• Предназначены для использования в качестве конкретных классов, но не в качестве базовых (см. рекомендацию 35).
• Обычно размещаются в стеке или являются непосредственными членами другого класса.
Базовые классы представляют собой строительные блоки иерархии классов. Базовый класс обладает следующими свойствами.
• Имеет деструктор, который является либо открытым и виртуальным, либо защищенным и невиртуальным (см. рекомендацию 50), а также копирующий конструктор и оператор присваивания, не являющиеся открытыми (см. рекомендацию 53).
• Определяет интерфейс посредством виртуальных функций.
• Обычно объекты такого класса создаются динамически в куче как часть объекта производного класса и используются посредством (интеллектуальных) указателей.
Говоря упрощенно, классы свойств представляют собой шаблоны, которые несут информацию о типах. Класс свойств обладает следующими характеристиками.
• Содержит только операторы typedef и статические функции. Класс не имеет модифицируемого состояния или виртуальных функций.
• Обычно объекты данного класса не создаются (конструкторы могут быть заблокированы).
Классы стратегий (обычно шаблоны) являются фрагментами сменного поведения. Классы стратегий обладают следующими свойствами.
• Могут иметь состояния и виртуальные функции, но могут и не иметь их.
• Обычно объекты данного класса не создаются, и он выступает в качестве базового класса или члена другого класса.
Классы исключений представляют собой необычную смесь семантики значений и ссылок. При генерации исключений они передаются по значению, но должны перехватываться по ссылке (см. рекомендацию 73). Классы исключений обладают следующими свойствами.
• Имеют открытый деструктор и конструкторы, не генерирующие исключений (в особенности копирующий конструктор, генерация исключения в котором приводит к завершению работы программы).
• Имеют виртуальные функции и часто реализуют клонирование (см. рекомендацию 54).
• Предпочтительно делать их производными от std::exception.
Вспомогательные классы обычно поддерживают отдельные идиомы (например, RAII — см. рекомендацию 13). Важно, чтобы их корректное использование не было сопряжено с какими-либо трудностями и наоборот — чтобы применять их некорректно было очень трудно (например, см. рекомендацию 53).
Ссылки
[Abrahams01b] • [Alexandrescu00a] • [Alexandrescu00b] • [Alexandrescu01] §3 • [Meyers96] §13 • [Stroustrup00] §8.3.2, §10.3, §14.4.6, §25.1 • [Vandevoorde03] §15
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Какой таймер выбрать?
Какой таймер выбрать? Создав таймер, теперь вы должны решить, какого типа будет этот таймер. Это осуществляется путем комбинирования аргументов функции timer_settime(), которая обычно применяется для собственно запуска таймера:#include <time.h>int timer_settime(timer_t timerid, int flags, struct itimerspec
Вот ты какой, «троянский конь»!
Вот ты какой, «троянский конь»! «Троянский конь» – это не вирус. Область их «компетенции» – воровство конфиденциальной информации, в том числе и паролей, с последующей передачей их хозяину. «Троянский конь» состоит из клиента и сервера. Серверная часть, как правило,
Блоги какой тематики вы ведете? Блоги какой тематики вы хотели бы вести?
Блоги какой тематики вы ведете? Блоги какой тематики вы хотели бы вести? Многие блоггеры или не выделяют одну тему и пишут обо всем понемногу, или описывают свой дневник шутливо: «Да так, попукиваю в воздух».Некоторые блоггеры отвечали, что уже ведут дневники на все
Это не почта! Это спам какой-то!
Это не почта! Это спам какой-то! Что такое спам? В общем смысле спамом называют информацию, которую нам навязывают[19] . Реклама, периодически прерывающая интереснейший фильм или финал чемпионата мира по футболу, – тот же спам, но с ней почему-то не борются, а убеждают нас,
1.6.6. Правило расчетливости: пишите большие программы, только если после демонстрации становится ясно, что ничего другого не остается
1.6.6. Правило расчетливости: пишите большие программы, только если после демонстрации становится ясно, что ничего другого не остается Под "большими программами" в здесь подразумеваются программы с большим объемом кода и значительной внутренней сложностью. Разрешая
Какой архиватор все же лучший?
Какой архиватор все же лучший? Трудно со стопроцентной уверенностью сказать, какой архиватор позволяет получить максимальную степень сжатия. Наиболее вероятно, что из WinAce,WinRAR и 7-Zip лучше справится WinRAR. Однако даже при сжатии файлов одного и того же типа (например,
1.6.6 Правило расчетливости: пишите большие программы, только если после демонстрации становится ясно, что ничего другого не остается
1.6.6 Правило расчетливости: пишите большие программы, только если после демонстрации становится ясно, что ничего другого не остается Под "большими программами" в здесь подразумеваются программы с большим объемом кода и значительной внутренней сложностью. Разрешая
Какой формат выбрать
Какой формат выбрать В главе 1 мы уже упоминали о различных форматах графических файлов. Сейчас настало время подробнее разобраться, какой из них имеет преимущество в том или ином случае. Рассмотрим три наиболее популярных формата: TIFF, JPEG и GIF.TIFFИспользовать формат TIFF
ГОЛУБЯТНЯ: Праздник какой-то…
ГОЛУБЯТНЯ: Праздник какой-то… Автор: Сергей ГолубицкийСегодня расскажу об утилите, претендующей на звание самой невероятной «через-не-могу». К «черезнемогушкам» относятся программы, которые конкурируют там, где конкурировать немыслимо по определению. Например,
Какой компьютер вам нужен
Какой компьютер вам нужен Общие рекомендацииПри выборе вычислительной машины следует опасаться двух крайностей.• Во-первых, есть риск переплатить и купить то, что вам не очень-то и нужно. • Во-вторых, слишком дешевый компьютер может оказаться недостаточно
У9.2 Какой уровень утилизации?
У9.2 Какой уровень утилизации? Подход на уровне компонентов, если программировать на языке типа Pascal или C, где операционная система предоставляет dispose или free, может напрямую использовать эти операции вместо создания своего списка свободной памяти для каждого типа структур
Какой ноутбук выбрать
Какой ноутбук выбрать Предварительные выводы таковы. Если вам необходим ноутбук для выполнения несложных офисных задач (вроде набора текста, обработки данных в электронных таблицах или поиска информации в Интернете), то вполне подойдет бюджетный компьютер. Кроме того,
Прогноз для информационных технологий уровня предприятия: облачно, временами ясно Андрей Васильков
Прогноз для информационных технологий уровня предприятия: облачно, временами ясно Андрей Васильков Опубликовано 27 августа 2013 Ещё в начале XXI века со словами enterprise level прочно ассоциировались эксклюзивные и сверхдорогие ИТ-решения для крупнейших