Практика на абстрактный класс в C++
Задачи описывают абстрактный класс с чистым виртуальным методом, двумя конкретными наследниками и общим методом с телом в базе.
Сделайте абстрактный класс Storage
с чистым виртуальным методом count.
Сделайте классы ListStorage
и SetStorage, которые возвращают
размер своей коллекции. Выведите оба значения
для непустых коллекций.
Дан класс:
class Report {
public:
virtual std::string title() const = 0;
virtual std::string body() const = 0;
std::string headline() const {
std::string t = title();
for (char& ch : t) {
ch = std::toupper(ch);
}
return t;
}
};
Сделайте DailyReport с заголовком "day"
и телом "ok". Выведите headline
и body.
Сделайте абстрактный класс Payment
с полем amount в конструкторе
и чистым виртуальным методом label.
Сделайте классы CardPayment
и CashPayment, возвращающие
"card" и "cash".
Выведите метки для суммы 50.
Сделайте абстрактный класс Shape
с чистым виртуальным методом area.
Сделайте Rect и Circle.
Дан список указателей на Shape
из двух фигур. Выведите сумму площадей.
Дан класс:
class Job {
public:
std::string name;
Job(std::string value) : name(value) {}
virtual bool run() = 0;
std::string describe() {
return name + (run() ? ":done" : ":fail");
}
};
Сделайте CopyJob, возвращающий
true, и MoveJob,
возвращающий false.
Выведите describe для обоих.
Сделайте абстрактный класс Notifier
с чистым виртуальным методом send
и методом prefix с телом, который
возвращает "msg: ". Сделайте
EmailNotifier и SmsNotifier,
которые дописывают канал к префиксу.
Выведите оба сообщения.
Сделайте абстрактный класс Discount
с методом apply(price) в базовом классе,
который вызывает чистый виртуальный метод
rate. Сделайте HalfPrice
со ставкой 0.5. Выведите цену
80 после скидки.