1. 程式人生 > >[C++] 實現多型的一個例子

[C++] 實現多型的一個例子

程式碼:

#include <iostream>
using namespace std;

class Animal
{
public:
    virtual void makeSound() { cout << "rawr" << endl; }
};

class Dog : public Animal
{
public:
    virtual void makeSound() {cout << "bark" << endl;}
};

int main()
{
    Animal animal;
    animal.makeSound(); // rawr (1)
Dog dog; dog.makeSound(); // bark (2) Animal badDog = Dog(); badDog.makeSound(); // (3) rawr !!!!!!!!!!!!!!!!!!! Animal* goodDog = new Dog(); goodDog->makeSound(); // bark (4) }

定義了一個Animal類,派生類Dog,如果不使用指標或引用,badDog的型別永遠是Animal型別,而不會是別的型別。Animal badDog = Dog()將一個新的Dog物件複製到badDog

, 由於badDog只是Animal型別,只會將Dog物件進行切片,取屬於Animal的部分,稱為切片(slicing)。