/*An example of polymorphism defeated*/ #include #include using namespace std; class AorBorC { protected: public: virtual string type(){return "?";} }; class A: public AorBorC { public: string type(){return "A";} }; class B: public AorBorC { public: string type(){return "B";} }; class C: public AorBorC { public: string type(){return "C";} }; void oops(AorBorC &x) { cout << x.type() << endl; } void notoops(AorBorC x) { cout << x.type() << endl; } int main() { A a; oops(a); notoops(a); B b; oops(b); notoops(b); C c; oops(c); notoops(c); }