#include #include class animal { public: virtual std::string say() const = 0; }; class cat: public animal { public: virtual std::string say() const { return "meow"; } }; class dog: public animal { public: virtual std::string say() const { return "bark"; } }; class animal_container { public: void check(const animal &a) const { std::cout << a.say() << std::endl; } }; int main() { animal_container a; cat c; dog d; a.check(c); a.check(d); a.check(d); a.check(c); return 0; }