Классы
Подсказка. Атрибуты и методы записывайте в формате «имя : тип».
Если тип не указан, будет использован int для атрибутов и void для методов.
Связи между классами
Типы связей: наследование (public Base), композиция (объект-член),
агрегация (указатель или ссылка), ассоциация (использование).
UML-диаграмма
C++-каркас
// Добавьте хотя бы один класс — и здесь появится код.
Обозначения UML
| Связь | Как выглядит | Смысл в C++ |
|---|---|---|
| Наследование | Child ──▷ Parent |
class Child : public Parent { ... }; |
| Композиция | A ◆── B |
Член-объект: B b; внутри A |
| Агрегация | A ◇── B |
Указатель или ссылка: B* b; |
| Ассоциация | A ──── B |
Класс A использует B (параметр, локальная переменная) |
Разница между композицией и агрегацией в жизненном цикле: при композиции
часть уничтожается вместе с целым, при агрегации — может существовать и отдельно.
Задание
- Соберите иерархию «Фигура → Круг, Квадрат» с общим методом
area(). - Добавьте в базовый класс виртуальный деструктор. Как это отразится в сгенерированном коде?
- Спроектируйте класс
Library, который содержит несколькоBook. Какую связь использовать — композицию или агрегацию? - Сгенерируйте каркас и доведите его до компилирующегося состояния: заполните тела методов.
- Почему
protectedудобно использовать в базовом классе при наследовании? Попробуйте сделать атрибутыprivate— какие проблемы появятся у наследников?