#include #include using namespace std; /////////////////////////////////////////// class Pet // Abstract class { public: Pet(string name); // constructor virtual void goes()=0; // pure virtual function, polymorphic virtual void likes()=0; // pure virtual function string I(); private: string my_name; }; Pet::Pet(string name) :my_name(name) {} string Pet::I() { return my_name;} /////////////////////////////////////////// class Dog: public Pet { public: Dog(string name); // constructor void goes(); void likes(); private: string my_name; }; Dog::Dog(string name) :Pet(name) {} void Dog::goes() { cout << I() << " goes Woof!! Woof!!\n"; } void Dog::likes() { cout << I() << " likes bone.\n";} /////////////////////////////////////////// class Cat: public Pet { public: Cat(string name); // constructor void goes(); void likes(); private: string my_name; }; Cat::Cat(string name) :Pet(name) {} void Cat::goes() { cout << I() << " goes Meow!! Meow!!\n";} void Cat::likes() { cout << I() << " likes fish.\n";} int main() { // Pet lulu("Lulu"); // Can't be used. Dog lucky("Lucky"); Cat mimi("Mimi"); // lulu.goes(); lulu.likes(); cout << endl; lucky.goes(); lucky.likes(); cout << endl; mimi.goes(); mimi.likes(); cout << "\n\n"; return 0; }