**Задача 2: Агрегация в библиотеке** Создайте класс `Book` (книга) с полями `title` и `author`. Создайте класс `Library` (библиотека), который содержит коллекцию книг. #include #include #include using namespace std; // создайте необходимые классы и методы int main() { Library library; library.addBook(Book("C++ Primer", "Stanley B. Lippman")); library.addBook(Book("Effective C++", "Scott Meyers")); library.displayBooks(); return 0; } ``` #### Пояснение: - Класс `Library` использует агрегацию, так как книги могут существовать независимо от библиотеки. --- ### **Задача 3: Композиция в компьютере** Создайте класс `CPU` (процессор) и класс `Computer` (компьютер). Класс `Computer` должен содержать объект класса `CPU` и предоставлять метод для вывода информации о процессоре. #include #include using namespace std; // создайте необходимые классы и методы int main() { Computer myPC("Intel Core i7"); myPC.displayInfo(); return 0; } ``` #### Пояснение: - Класс `Computer` владеет объектом `CPU`, что является композицией. --- ### **Задача 4: Полиморфизм и наследование** Создайте базовый класс `Animal` с методом `makeSound()`. Создайте производные классы `Dog` и `Cat`, которые переопределяют этот метод. Используйте полиморфизм для вызова методов. #include using namespace std; // создайте необходимые классы и методы int main() { Dog dog; Cat cat; animalSound(&dog); animalSound(&cat); return 0; } ``` #### Пояснение: - Полиморфизм позволяет вызывать методы производных классов через указатель на базовый класс. --- ### **Задача 5: Наследование и доступ к членам** Создайте базовый класс `Person` с приватными полями `name` и `age`. Создайте производный класс `Employee`, который добавляет поле `salary` и предоставляет метод для вывода всей информации. #include #include using namespace std; // создайте необходимые классы и методы int main() { Employee emp("John Doe", 30, 50000); emp.display(); return 0; } ``` #### Пояснение: - Защищённые поля базового класса (`name`, `age`) доступны в производном классе. --- ### **Задача 6: Агрегация в магазине** Создайте класс `Product` (товар) и класс `Store` (магазин). Магазин содержит коллекцию товаров. #include #include #include using namespace std; // создайте необходимые классы и методы int main() { Store store; store.addProduct(Product("Laptop", 1200)); store.addProduct(Product("Phone", 800)); store.displayProducts(); return 0; } ``` #### Пояснение: - Товары могут существовать независимо от магазина, что делает это агрегацией. --- ### **Задача 7: Композиция в доме** Создайте класс `Room` (комната) и класс `House` (дом). Дом содержит несколько комнат. #include #include #include using namespace std; // создайте необходимые классы и методы int main() { House house({"Living Room", "Bedroom", "Kitchen"}); house.displayRooms(); return 0; } ``` #### Пояснение: - Комнаты не могут существовать без дома, что делает это композицией. --- #include #include using namespace std; // создайте необходимые классы и методы ostream& operator<<(ostream& os, const Point& point) { point.display(); return os; } int main() { ColoredPoint cp(3, 4, "Red"); cout << cp << endl; return 0; } ``` #### Пояснение: - Оператор `<<` перегружен для работы с базовым и производным классами. --- ### **Задача 9: Агрегация в школе** Создайте класс `Student` (ученик) и класс `Classroom` (класс). Класс содержит учеников. #include #include #include using namespace std; // создайте необходимые классы и методы int main() { Classroom classroom; classroom.addStudent(Student("Alice")); classroom.addStudent(Student("Bob")); classroom.displayStudents(); return 0; } ``` #### Пояснение: - Ученики могут существовать независимо от класса, что делает это агрегацией. --- ### **Задача 10: Композиция в телефоне** Создайте класс `Battery` (батарея) и класс `Phone` (телефон). Телефон содержит батарею. #include #include using namespace std; // создайте необходимые классы и методы int main() { Phone phone(5000); phone.displayInfo(); return 0; } ``` #### Пояснение: - Батарея не может существовать без телефона, что делает это композицией. ---