深入解析C++编程中的纯虚函数和抽象类

2020-01-06 13:45:49王旭

这种不用来定义对象而只作为一种基本类型用作继承的类,称为抽象类(abstract class ),由于它常用作基类,通常称为抽象基类(abstract base class )。凡是包含纯虚函数的类都是抽象类。因为纯虚函数是不能被调用的,包含纯虚函数的类是无法建立对象的。

抽象类的作用是作为一个类族的共同基类,或者说,为一个类族提供一个公共接口。一个类层次结构中当然也可不包含任何抽象类,每一层次的类都是实际可用的,可以用来建立对象的。

但是,许多好的面向对象的系统,其层次结构的顶部是一个抽象类,甚至顶部有好几层都是抽象类。

如果在抽象类所派生出的新类中对基类的所有纯虚函数进行了定义,那么这些函数就被赋予了功能,可以被调用。这个派生类就不是抽象类,而是可以用来定义对象的具体类(concrete class )。

如果在派生类中没有对所有纯虚函数进行定义,则此派生类仍然是抽象类,不能用来定义对象。虽然抽象类不能定义对象(或者说抽象类不能实例化),但是可以定义指向抽象类数据的指针变量。当派生类成为具体类之后,就可以用这种指针指向派生类对象,然后通过该指针调用虚函数,实现多态性的操作。

几个关于C++纯虚函数与抽象类的实例

下面是一个完整的程序,为了便于阅读,分段插入了一些文字说明。程序如下:

第(1)部分

 

  1. #include <iostream>  using namespace std; 
  2. //声明抽象基类Shape  class Shape 
  3. {  public: 
  4. virtual float area( )const {return 0.0;} //虚函数  virtual float volume()const {return 0.0;} //虚函数 
  5. virtual void shapeName()const =0; //纯虚函数  };