- Создайте в своём репозитории
2022-polytech-%фамилия%
директорию09_oop
- Cоздайте пустой
README.md
файл - В директории
09_oop/intro
создайте cmake-проект - Дополните пример с множественным наследованием из лекции: реализуйте конструкторы и деструкторы всех классов
- В конструкторе выводите в cout
ИмяКласса::ctor
, в деструктора —ИмяКласса::dtor
- Приведите в файле
README.md
пример вывода для случая с виртуальным наследованием и для случая без виртуального наследования - Отправьте решение на GitHub
- В директории
09_oop/json
создайте cmake-проект - Реализуйте иерархию классов, которая может описывать элементы подмножества языка JSON: https://ru.wikipedia.org/wiki/JSON (число, строка, булевое значение, массив)
- Реализуйте методы, позволяющие вывести заданный C++ классами JSON-объект вывести в cout
- Напищите тесты с помощью doctest
- Отправьте решение на GitHub
- В директории
09_oop/visitor
создайте cmake-проект - Перенесите написанную ниже программу в проект
- В программе представлен пример реализации паттерна «Посетитель», подробнее о нём можно почитать по ссылке https://refactoring.guru/ru/design-patterns/visitor
- Добавьте в программу новую геометрическую фигуру: Triangle
- Добавьте в программу 2 новых посетителя: Perimeter (вычисляет периметр фигуры), Square (вычисляет площадь фигуры)
- Приведите примеры использования посетителей
- Отправьте решение на GitHub
#include <iostream>
#include <vector>
using namespace std;
struct Rectangle;
struct Circle;
struct IVisitable
{
virtual void accept(Rectangle& r) = 0;
virtual void accept(Circle& c) = 0;
virtual ~IVisitable() {}
};
struct IElenent
{
virtual void visit(IVisitable& v) = 0;
virtual ~IElenent() {}
};
struct Rectangle: IElenent
{
void visit(IVisitable& v) final
{
v.accept(*this);
}
};
struct Circle: IElenent
{
void visit(IVisitable& v) final
{
v.accept(*this);
}
};
struct Printer: IVisitable
{
void accept(Rectangle& r) final
{
cout << "Rectangle" << endl;
}
void accept(Circle& c) final
{
cout << "Circle" << endl;
}
};
int main()
{
std::vector<IElenent*> elements;
elements.push_back(new Circle);
elements.push_back(new Rectangle);
Printer p;
for(auto& el: elements)
{
el->visit(p);
}
}
Комментарии
- В этом файле есть опечатки, вы можете их исправить через pull request.
- Всю работу удобно вести в отдельной ветке и затем влить готовый результат в основную ветку.