C++纯虚函数详解

时间:2014-11-11 21:57    点击:

有时在基类中将某一成员函数定为虚函数,并不是基类本身的要求,而是考虑到派生类的需要,在基类中预留了一个函数名,具体功能留给派生类根据需要去定义。

例如在前边的例12.1程序中,基类Point中没有求面积的area函数,因为“点”是没有面积的,也就是说,基类本身不需要这个函数,所以在例12.1程序中的Point类中没有定义area函数。

但是,在其直接派生类Circle和间接派生类Cylinder中都需要有area函数,而且这两个area函数的功能不同,一个是求圆面积,一个是求圆柱体表面积。

有的读者自然会想到,在这种情况下应当将area声明为虚函数。可以在基类Point中加一个area函数,并声明为虚函数:
    virtual float area( )const {return 0;}
其返回值为0,表示“点”是没有面积的。

其实,在基类中并不使用这个函数,其返回值也是没有意义的。为简化,可以不写出这种无意义的函数体,只给出函数的原型,并在后面加上“=0”,如:
    virtual float area( )const =0;  //纯虚函数
这就将area声明为一个纯虚函数(pure virtual function)。

纯虚函数是在声明虚函数时被“初始化”为0的函数。声明纯虚函数的一般形式是
    virtual 函数类型 函数名 (参数表列) = 0;

关于纯虚函数需要注意的几点:
  1. 纯虚函数没有函数体;
  2. 最后面的“=0”并不表示函数返回值为0,它只起形式上的作用,告诉编译系统“这是纯虚函数”;
  3. 这是一个声明语句,最后应有分号。

纯虚函数只有函数的名字而不具备函数的功能,不能被调用。它只是通知编译系统:“在这里声明一个虚函数,留待派生类中定义”。在派生类中对此函数提供定义后,它才能具备函数的功能,可被调用。

纯虚函数的作用是在基类中为其派生类保留一个函数的名字,以便派生类根据需要对它进行定义。

如果在基类中没有保留函数名字,则无法实现多态性。如果在一个类中声明了纯虚函数,而在其派生类中没有对该函数定义,则该虚函数在派生类中仍然为纯虚函数。

来源:未知//所属分类:基础教程/更新时间:2014-11-11 21:57
顶一下
(0)
0%
踩一下
(0)
0%
上一篇:C++虚析构函数详解
下一篇:C++抽象类深入
相关内容