[C++] 實現多型的一個例子
阿新 • • 發佈:2018-12-23
程式碼:
#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)。