Добавил:
AlexKon
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:ЯП6 / ЯП6
.cpp#include <iostream>
#include <vector>
using namespace std;
class Virus
{
private:
string name;
public:
Virus(string name) : name(name) {}
string getName() { return name; }
};
class Antivirus //Абстрактный класс
{
public:
virtual void scan() = 0;
virtual void update() = 0;
virtual void quarantine() = 0;
};
class BasicAntivirus : public Antivirus // Наследование
{
private:
vector<Virus> viruses; // Агрегация
public:
void scan() override
{
cout << "Сканирование файлов...\n";
viruses.push_back(Virus("Вирус 1")); // Добавление в агрегированный объект
viruses.push_back(Virus("Вирус 2")); // Добавление в агрегированный объект
}
void update() override
{
cout << "Обновление базы данных вирусов...\n";
}
void quarantine() override
{
cout << "Карантин зараженных файлов...\n";
}
void clean()
{
cout << "Очистка системы от вирусов...\n";
}
vector<Virus> getViruses() { return viruses; } // Ассоциация
};
class PremiumAntivirus : public Antivirus // Наследование
{
private:
BasicAntivirus basicAntivirus; // Композиция
public:
void scan() override
{
cout << "Сканирование файлов...\n";
basicAntivirus.scan(); // Делегирование
}
void update() override
{
cout << "Обновление базы данных вирусов...\n";
basicAntivirus.update(); // Делегирование
}
void quarantine() override
{
cout << "Карантин зараженных файлов...\n";
basicAntivirus.quarantine(); // Делегирование
}
void clean()
{
cout << "Очистка системы от вирусов...\n";
basicAntivirus.clean(); // Делегирование
}
BasicAntivirus& getBasicAntivirus() { return basicAntivirus; } // Ассоциация
};
class BasicAntivirusRealization : public Antivirus // Наследование
{
private:
BasicAntivirus basicAntivirus; // Реализация
public:
void scan() override
{
basicAntivirus.scan();
}
void update() override
{
basicAntivirus.update();
}
void quarantine() override
{
basicAntivirus.quarantine();
}
};
int main()
{
setlocale(LC_ALL, "Russian");
PremiumAntivirus antivirus;
antivirus.scan(); // Получаем список из объекта
vector<Virus> viruses = antivirus.getBasicAntivirus().getViruses(); // Выполнение методов ассоциации
cout << "Найдено вирусов: " << viruses.size() << std::endl;
BasicAntivirusRealization realization;
realization.scan();
realization.update();
realization.quarantine();
return 0;
}