---
# System prepended metadata

title: Animal method override exp 2

---

# Animal method override exp 2

```cpp=
#include <stdio.h>

class Animal {
    public:
    // !!!! 若要展現多型，則 super class 的該個函式必須加上 virtual 前綴關鍵字
    virtual void bark() {
        printf("???\n");
    }
};

class Cat : public Animal {
    public:
    void bark() {
        printf("Meow\n");
    }
};

class Dog : public Animal {
    public:
    void bark() {
        printf("Wan!\n");
    }
};

int main() {
    Animal* a;
    Cat* c = new Cat();
    Dog* d = new Dog();
    
    // a 的型態是 Animal 指標，可以吃下一個 Cat 物件
    a = c; 
    // 雖然 a 的型態是 Animal，但內容物是一個 Cat 物件，此時會去執行 Cat 的 bark()
    // 因此印出「Meow」
    a->bark(); 
    
    // a 的型態是 Animal 指標，可以吃下一個 Dog 物件
    a = d;
    // 雖然 a 的型態是 Animal，但內容物是一個 Dog 物件，此時會去執行 Dog 的 bark()
    // 因此印出「Wan!」
    a->bark();
    
    delete c;
    delete d;
    
    return 0;
}


```