1. Классы-значения моделируют встроенные типы (примером является std::vector ) - имеет открытый деструктор, копирующий конструктор и присваивание с семантикой значения - не имеет виртуальных функций ( в том числе и деструктор) - предназначены для использования в качестве конкретных классов, но не в качестве базовых - обычно размещают в стеке или являются непосредственными членами другого класса
2. Базовый класс - это строительный блок иерархии классов. - имеет деструктор, который либо открытый и виртуальный, либо защищённый и не виртуальный, а так же не открытые копирующий конструктор и operator=. - определяет интерфейс посредством виртуальных функций - обычно его объекты создаются динамически в куче как часть объекта производного класса и используются посредством интеллектуальных указателей.
3. Классы свойств - это шаблоны, которые несут информацию о типах. - содержит только операторы typedef и статические функции. Класс не имеет модифицируемого состояния и виртуальных функций - обычно его объекты не создаются ( конструкторы могут быть заблокированы )
4. Классы стратегий (обычно шаблоны) являются фрагментами сменного поведения. - могут иметь состояния и виртуальные функции, а могут и не иметь - обычно его объекты не создаются и он выступает в качестве базового класса или члена другого класса
5. Классы исключений представляют собой необычную смесь семантики значений и ссылок. - при генерации исключений они передаются по значению, но должны перехватываться по ссылке - имеют открытый деструктор и конструкторы, не генерирующие исключений - имеют виртуальные функции и часто реализуют клонирование - желательно делать из производными от std::exception
|