Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- class Animal {
- public:
- Animal(const char * name) : name(name) {};
- virtual ~Animal() {}
- private:
- const char * name;
- };
- class Dog : public Animal {
- public:
- Dog(const char * name) : Animal(name) {};
- virtual ~Dog() {}
- void Pet() {
- std::cout << "Petted a dog!" << std::endl;
- }
- private:
- };
- class Cat : public Animal {
- public:
- Cat(const char * name) : Animal(name) {};
- virtual ~Cat() {}
- void Pet(){
- std::cout << "Petted a cat!" << std::endl;
- }
- };
- class Snoopy : public Dog {
- public:
- Snoopy() : Dog("Snoopy") {};
- virtual ~Snoopy() {}
- void Pet() {
- std::cout << "Petted snoopy!" << std::endl;
- }
- };
- class Garfield : public Cat {
- public:
- Garfield() : Cat("Garfield") {};
- virtual ~Garfield() {}
- void Pet() {
- std::cout << "Petted a garfield!" << std::endl;
- }
- };
- void pet(Animal* animal) {
- if (dynamic_cast<Cat*>(animal)) {
- if (dynamic_cast<Garfield*>(animal)) {
- Garfield* garfield = (Garfield*)animal;
- garfield->Pet();
- } else {
- Cat* cat = (Cat*)animal;
- cat->Pet();
- }
- } else if (dynamic_cast<Dog*>(animal)) {
- if (dynamic_cast<Dog*>(animal)) {
- Snoopy* snoopy = (Snoopy*)animal;
- snoopy->Pet();
- } else {
- Dog* dog = (Dog*)animal;
- dog->Pet();
- }
- }
- }
- int main() {
- Cat* garfield = new Garfield();
- pet(garfield);
- delete garfield;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement