#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)。