Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗cpOpFpMix 150 of 150 menu
◀

Смешанная практика ООП в C++

Задачи соединяют базовый класс с наследниками, перечисление для режима или роли и хранение объектов через std::unique_ptr или std::shared_ptr.

Сделайте enum class Role с константами Viewer и Editor. Сделайте класс Account с полем role и методом canEdit, который возвращает true только для Role::Editor. Сделайте AdminAccount, наследующий Account, где canEdit всегда true. Выведите три результата для зрителя, редактора и администратора.

Сделайте абстрактный класс Shape с area и классы Rect, Circle. Сделайте enum class Tag с Plain и Marked. Храните std::vector<std::unique_ptr<Shape>> из двух фигур. Выведите сумму площадей и значение Tag::Marked как число.

Сделайте класс Line с полями sku и price. Сделайте базовый Cart с методом total(lines) и DiscountCart, который возвращает сумму price минус 10, но не ниже 0. Дан вектор:

std::vector<Line> items = { Line("a", 30), Line("b", 5), };

Выведите итог для Cart и для DiscountCart.

Сделайте enum class Op с Add и Sub. Сделайте базовый Calc с виртуальным eval(a, b, op) и SafeCalc, который для Sub не опускается ниже 0. Выведите eval(5, 7, Op::Sub) для обоих классов.

Сделайте абстрактный Storage с size и ListStorage над std::vector<std::string>. Держите std::shared_ptr<Storage> в двух переменных, добавьте две строки через одну копию указателя и выведите size и use_count.

Сделайте enum class Status с New, Done. Сделайте Task с полем статуса и виртуальным markDone. Сделайте UrgentTask, который при завершении выводит "urgent". Храните std::unique_ptr<Task>, завершите задачу и выведите статус.

Сделайте класс Portal с полем std::string name и enum class Mode с Guest и User. Метод greet возвращает "hello guest" или "hello " с именем. Создайте два std::unique_ptr<Portal> для обоих режимов и выведите оба приветствия.

←
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить