**Задача 2: Агрегация в библиотеке**
Создайте класс `Book` (книга) с полями `title` и `author`. Создайте класс `Library` (библиотека), который содержит коллекцию книг.
#include <iostream>
#include <vector>
#include <string>
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 <iostream>
#include <string>
using namespace std;
// создайте необходимые классы и методы
int main() {
Computer myPC("Intel Core i7");
myPC.displayInfo();
return 0;
}
```
#### Пояснение:
- Класс `Computer` владеет объектом `CPU`, что является композицией.
---
### **Задача 4: Полиморфизм и наследование**
Создайте базовый класс `Animal` с методом `makeSound()`. Создайте производные классы `Dog` и `Cat`, которые переопределяют этот метод. Используйте полиморфизм для вызова методов.
#include <iostream>
using namespace std;
// создайте необходимые классы и методы
int main() {
Dog dog;
Cat cat;
animalSound(&dog);
animalSound(&cat);
return 0;
}
```
#### Пояснение:
- Полиморфизм позволяет вызывать методы производных классов через указатель на базовый класс.
---
### **Задача 5: Наследование и доступ к членам**
Создайте базовый класс `Person` с приватными полями `name` и `age`. Создайте производный класс `Employee`, который добавляет поле `salary` и предоставляет метод для вывода всей информации.
#include <iostream>
#include <string>
using namespace std;
// создайте необходимые классы и методы
int main() {
Employee emp("John Doe", 30, 50000);
emp.display();
return 0;
}
```
#### Пояснение:
- Защищённые поля базового класса (`name`, `age`) доступны в производном классе.
---
### **Задача 6: Агрегация в магазине**
Создайте класс `Product` (товар) и класс `Store` (магазин). Магазин содержит коллекцию товаров.
#include <iostream>
#include <vector>
#include <string>
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 <iostream>
#include <vector>
#include <string>
using namespace std;
// создайте необходимые классы и методы
int main() {
House house({"Living Room", "Bedroom", "Kitchen"});
house.displayRooms();
return 0;
}
```
#### Пояснение:
- Комнаты не могут существовать без дома, что делает это композицией.
---
#include <iostream>
#include <string>
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 <iostream>
#include <vector>
#include <string>
using namespace std;
// создайте необходимые классы и методы
int main() {
Classroom classroom;
classroom.addStudent(Student("Alice"));
classroom.addStudent(Student("Bob"));
classroom.displayStudents();
return 0;
}
```
#### Пояснение:
- Ученики могут существовать независимо от класса, что делает это агрегацией.
---
### **Задача 10: Композиция в телефоне**
Создайте класс `Battery` (батарея) и класс `Phone` (телефон). Телефон содержит батарею.
#include <iostream>
#include <string>
using namespace std;
// создайте необходимые классы и методы
int main() {
Phone phone(5000);
phone.displayInfo();
return 0;
}
```
#### Пояснение:
- Батарея не может существовать без телефона, что делает это композицией.
---