谭浩强《C++程序设计》学习篇———虚函数
一、定义
定义:在某基类中声明为 virtual 并在一个或多个派生类中被重新定义的成员函数。
语法:virtual 函数返回类型函数名(参数表) { 函数体 }
用途:实现多态性,通过指向派生类的基类指针,访问派生类中同名覆盖成员函数 虚函数必须是基类的非静态成员函数,其访问权限可以是protected或public。
定义为virtual的函数是基类期待派生类重新定义的,基类希望派生类继承的函数不能定义为虚函数。
二、作用
当把基类的某个成员函数声明为虚函数后,允许其在派生类中对该函数重新定义,赋予其新的功能,并且可以通过指向基类的指针指向同一类族中不同类的对象,从而调用其中的同名函数。
由虚函数实现的动态多态性就是:同一类族中不同类的对象,对同一函数调用作出不同的响应。
三、动态关联
基类指针变量先指向了某一个类对象,然后通过此指针调用该对象中的函数,这样的调用在编译时是无法确定调用哪一个类的虚函数的,所以在运行阶段确定关联关系。
这种多态性是动态多态性,即运行阶段的多态性。
虚析构函数:
(截图来自谭浩强《C++程序设计》
p是指向基类的指针变量,指向new开辟的动态存储空间,当基类中的析构函数没有声明为virtual时,只会执行Point的析构函数,如果希望能先执行Circle的析构函数,需要将基类的析构函数声明为virtual.
四、纯虚函数
定义:基类中声明一个虚函数,留待派生类中定义
语法:virtual 函数类型函数名(参数列表)=0
作用:在基类中为派生类保留一个函数的名字,以便派生类根据需要对它进行定义