//
動態的多態:一個接口,多個實現,不同的對象有相同的基類,接收同一消息時,產生不同的反應
#include "stdafx.h"
#include <iostream>
using namespace std;
class Biology
{
public:
void grow(){ cout << "biology grow" << endl; }
};
class Animal :public Biology
{
public:
void grow(){ cout << "animal grow" << endl; }
};
class Rabbit : public Animal
{
public:
void grow(){ cout << "rabbit grow" << endl; }
};
int _tmain(int argc, _TCHAR* argv[])
{
Animal animal;
Biology * biology = &animal;
biology->grow(); //若是函數體前不加virtual 實現基類的方法
Biology * ani = new Animal;
ani->grow();
Animal * anil1 = new Rabbit;
anil1->grow();
system("pause");
return 0;
}
多態的注意點:
(1)virtual實現的是動態的多態
(2)實現多態,函數名,返回值,形參的個數和類型必須一樣
(3)基類函數前加virtual,派生類默認聲明爲virtual,可以繼承
(4)只有當基類指針指向派生類對象的時候,調用virtual函數,並且子類中也有該方法,才構成多態
補充:
純虛函數和抽象類:
virtual grow() = 0; 純虛函數
含有純虛函數的類稱爲抽象類,不可以實例化