#include #include using namespace std; class Behaviour { public: Behaviour() = default; virtual ~Behaviour() = default; virtual int apply(int other) = 0; private: }; class Add : public Behaviour { public: Add(int value) : value{value} {} virtual int apply(int other) override { return other += value; } private: int value; }; class Factorial : public Behaviour { public: Factorial() {}; virtual int apply(int other) override { int iterations{other}; int sum{1}; for ( int i{1}; i <= iterations; ++i ) { sum *= i; } return sum; } private: }; int main() { int value{0}; Add a1{3}; Factorial f1{}; Add a2{1}; Factorial f2{}; std::vector behaviours { &a1, &f1, &a2, &f2 }; for ( Behaviour* behaviour_pointer : behaviours ) { value = (*behaviour_pointer).apply(value); } std::cout << value << std::endl; }