虚函数与纯虚函数

来源:互联网 发布:360数据恢复大师好用吗 编辑:程序博客网 时间:2024/05/19 03:29
(1)虚函数
使用关键字virtual,定义虚函数。
作用:启用动态绑定。编写程序时能使用继承层次中任意类型的对象,无需关心对象的具体类型(狮子还是老虎),也无需关心函数是在基类中定义还是在某一派生类中定义的。
定义为virtual的函数是基类期待派生类重新定义的。
语法:virtual 函数返回类型 函数名(参数表) { 函数体 } 

------------------------------------------------------------------------
(2)纯虚函数
纯虚函数不需要定义其实际操作,它的存在只是为了在派生类中被重新定义,只是为了提供一个多态接口。
一般格式:
class <类名>
{
virtual <类型><函数名>(<参数表>)=0;
};
在许多情况下,在基类中不能对虚函数给出有意义的实现,而把它声明为纯虚函数,它的实现留给该基类的派生类去做。这就是纯虚函数的作用。
纯虚函数可以让类先具有一个操作名称,而没有操作内容,让派生类在继承时再去具体地给出定义。

凡是含有纯虚函数的类叫做抽象类。这种类不能声明对象,只是作为基类为派生类服务。除非在派生类中完全实现基类中所有的的纯虚函数,否则,派生类也变成了抽象类,不能实例化对象。

引入原因:
1、为了方便使用多态特性,我们常常需要在基类中定义虚函数。
2、在很多情况下,基类本身生成对象是不合情理的。例如,动物作为一个基类可以派生出老虎、孔雀等子类,但动物本身生成对象明显不合常理。
为了解决上述问题,引入了纯虚函数的概念,若要使派生类为非抽象类,则编译器要求在派生类中,必须对纯虚函数予以重写以实现多态性。同时含有纯虚函数的类称为抽象类,它不能生成对象。这样就很好地解决了上述两个问题。

引申----抽象类:上例中的动物就应该是一个抽象类。
含有拥有纯虚函数的类,就是一种抽象类,它是不能被实例化的。如果类B继承了A之后,A是抽象类,如果类B没有改写A中的纯虚函数,那么B本身也就成为一个拥有纯虚函数的类,也就变成抽象类了。

引申----多态性
指相同对象收到不同消息或不同对象收到相同消息时产生不同的实现动作。C++支持两种多态性:编译时多态性,运行时多态性。
a.编译时多态性:通过重载函数实现
b.运行时多态性:通过虚函数实现。

原创粉丝点击