/
rokhin
/
Small_test_programs_cpp
Обзор
Документация
Войти
/
rokhin
/
Small_test_programs_cpp
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
functor_accum.cpp
75 строк
1 KB
sergeyrokhin
virtual void foo() = 0;
04 фев 2025, 17:31
04 фев 2025, 17:31
e926876
Код
Авторство
О чём код?
#include <iostream> class Calc { public: virtual int calculate(int, int) = 0; virtual int GetAccum() = 0; }; class Sum : public Calc { public: int calculate(int x, int y) override { int tmp = x + y; _accum += tmp; return tmp; } int GetAccum() override { return _accum; } int _accum = 0; }; class Sub : public Calc { public: int calculate(int x, int y) override { int tmp = x + y; _accum -= tmp; return tmp; } int GetAccum() override { return _accum; } int _accum = 0; }; class Object { Calc * _calc; public: Object(Calc * calc) : _calc(calc) {} ~Object() { delete _calc;} int calculate(int x, int y) { return _calc->calculate(x, y); } friend std::ostream& operator<<(std::ostream &os, const Object &other); }; std::ostream& operator<<(std::ostream &os, const Object &other) { return os << "accum = " << other._calc->GetAccum(); } int main() { Object obj_sum(new Sum()); // объект функции Object obj_sub(new Sub()); // объект функции for (size_t i = 0; i < 5; i++) { obj_sum.calculate(i, i); obj_sub.calculate(i, i); } std::cout << obj_sum << std::endl; // вывод: sum = 25 std::cout << obj_sub << std::endl; // вывод: sum = 25 return 0; }