#include #include #include //for chrono::system_clock #include //for default_random_engine #include //for bind #include "derived.h" using namespace std; int main() { unsigned seed = chrono::system_clock::now().time_since_epoch().count(); default_random_engine engine {seed}; uniform_int_distribution distribution {0, 1}; auto r {bind(distribution, engine)}; base b {10}; derived d {20, 30}; base *p; if (r() == 0) { //unpredictable 50-50 chance: r() could be 0 or 1 p = &b; } else { p = &d; } //With the keyword virtual we have achieved late binding, a.k.a., //dynamic binding. //Calls either base::print or derived::print. p->print(); cout << "\n"; }