C++语言程序设计

有的时候我们的基类只是起到接口的作用，没有必要生成该类的对象，该类本身也不需要对函数进行实现，这样的基类称之为抽象类。在C++中，有一种虚函数称之为纯虚函数，含有纯虚函数的类，就是抽象类。C++编译器不允许用抽象类创造对象，它只能被其它类继承。要定义抽象类，就必须定义纯虚函数，它实际上是起到一个接口的作用。
如果试图使用抽象类创造对象，编译器会给出错误信息。另外，由抽象类派生的类，必须对抽象类定义的纯虚函数进行实现。
当一个类声明了纯虚函数后，首先，编译器知道这个函数应使用动态联编，然后它会为这个类建立VTABLE表。由于这个函数是纯虚函数，没有实现，所以没有函数指针。编译器遇到这种情况会在VTABLE表中为它留下一个间隔，即一个函数指针大小的空间，不放任何东西。只要类中声明了一个纯虚函数，这个类的VTABLE表就是不完全的。编译器会禁止使用这个类创建对象。
虽然定义了纯虚函数的类是抽象类，不能用这个类创建对象，但是这不意味这这个类所有的函数都是纯虚函数，在该类里的其它函数就失去了意义。事实上，我们希望把公共的代码放在尽可能靠近基类的地方，这样不仅节省了空间，而且能使修改变得更加容易。
在基类中我们可能希望一段代码对于大部分或者所有的派生类都能使用，而不希望在每个类中重复这样的代码。在这种情况下，我们可以对纯虚函数进行实现。虽然纯虚函数有实现部分，但是，仍然不允许用抽象类创建对象。