【C++】多态 - 虚函数

这里先说下为什么会用到虚函数:

以下面的程序为例:



这个程序中,Carp是Fish的继承类,而Carp中覆盖了Swim这个方法,在MakeFishSwim这个函数中,要使用Fish类的形参,而你将yourFish这个Carp类的实参传递给了这个函数,让他执行Swim这个函数,这会发生什么,上面的程序运行结果:


这说明了什么?说明在MakeFishSwim这个程序中,它定义它的形参是Fish类型的,虽然你将yourFish这个Carp类传到了它那里,它仍然认为yourFish是Fish类的,并调用了Fish类Swim。

显然我们的初衷并不是这样,是希望对应的类执行自己的方法,那怎么避免这种情况呢?这就需要虚函数了。

虚函数的定义很简单,直接在方法定义最前面加上关键字“virtual”即可!举例:


虚函数最大的重要作用在于,对于析构函数,如果没有虚函数,delete将不会作用到派生类中的析构函数,会造成资源未释放,内存泄漏等隐患。


抽象基类和纯虚函数

不能被实例化的基类被称为抽象基类,这样的基类只有一个用途,那就是用它来派生出其他类,可使用纯虚函数的声明来创建纯虚函数。


值得注意的是:声明抽象基类后 1. 派生类必须声明相应的方法;2. 不能再对这个基类实例化

附上一个Shape, Circle,Triangle的例子:



猜你喜欢

转载自blog.csdn.net/onlyongwang/article/details/80636109