刚开始接触C++中的虚函数,云里雾里的感觉,后面看了几篇博客,了解了一些。
C++中面向对象程序设计中具有多态性,意思是对不同的对象发送同一个消息,而不同的对象对这消息的回应有着不同的行为。举个例子,你从火车站出来,大吼一声我要去XXX地方,会有的士、公交、三轮车还有黑车等着你,这时你可以选择其中之一,每种车明显不同,有的快,有的舒适,有的危险。在这里面,“吼声”就是C++中的消息,其中不同的对象即为各种车,消息是一定的,但回应的方法有多种。在C++里面,虚函数有着自己的作用。
假设有这么一个基类,比如:
class Car{
private:float Speed;
public:
car(float speed){
Speed =speed;
}
void drive();
};
现在我们为它添加派生类:
class Bus:public Car{
public:
Bus(float speed):Car(Speed){};
void drive();
}
然后在main中加入
Car *car;
Bus bus(60);
car = &bus;
car->drive();
运行会发现最后的drive()是调用的基类的drive(),即是car中的,而不是bus中的,为什么呢,虽然派生类对象调用同名成员函数是来自自己类中的成员函数,但是当基类指针指向共有派生类对象时(也就是bus),它只能访问从基类继承下来的成员,而不能访问派生类中定义的成员。那么想使用bus中的drive()函数该怎么办呢?说起来也简单,只需将所有类中的drive()函数声明前加上virtual将其变为虚函数就行啦