剛開始接觸C++中的虛函數(shù),云里霧里的感覺,后面看了幾篇博客,了解了一些。
C++中面向?qū)ο蟪绦蛟O計中具有多態(tài)性,意思是對不同的對象發(fā)送同一個消息,而不同的對象對這消息的回應有著不同的行為。舉個例子,你從火車站出來,大吼一聲我要去XXX地方,會有的士、公交、三輪車還有黑車等著你,這時你可以選擇其中之一,每種車明顯不同,有的快,有的舒適,有的危險。在這里面,“吼聲”就是C++中的消息,其中不同的對象即為各種車,消息是一定的,但回應的方法有多種。在C++里面,虛函數(shù)有著自己的作用。
假設有這么一個基類,比如:
class Car{
private:float Speed;
public:
car(float speed){
Speed ?=speed;
}
void drive();
};
現(xiàn)在我們?yōu)樗砑优缮?
class Bus:public Car{
public:
Bus(float speed):Car(Speed){};
void drive();
}
然后在main中加入
Car *car;
Bus bus(60);
car = &bus;
car->drive();
運行會發(fā)現(xiàn)最后的drive()是調(diào)用的基類的drive(),即是car中的,而不是bus中的,為什么呢,雖然派生類對象調(diào)用同名成員函數(shù)是來自自己類中的成員函數(shù),但是當基類指針指向共有派生類對象時(也就是bus),它只能訪問從基類繼承下來的成員,而不能訪問派生類中定義的成員。那么想使用bus中的drive()函數(shù)該怎么辦呢?說起來也簡單,只需將所有類中的drive()函數(shù)聲明前加上virtual將其變?yōu)樘摵瘮?shù)就行啦