Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЯП6 / ЯП6

.cpp
Скачиваний:
0
Добавлен:
22.04.2023
Размер:
3.19 Кб
Скачать
#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;
}
Соседние файлы в папке ЯП6