抽象基类
抽象基类之所以是抽象的,是因为不能实例化抽象基类的对象,抽象基类可以用来指明某些必须被派生类覆盖的虚函数,如果这些派生类想要拥有对象的话。只有符合下面条件的类才可以称为抽象基类:
类必须拥有一个纯虚成员函数
在纯虚成员函数声明的结尾加上=0就可以将这个函数定义为纯虚成员函数。
class ABC{ //Abstract Base Class
public:
virtual void open() = 0;
};
上面的代码段展示了声明一个纯虚成员函数的方法,这个类的声明语法声明了一个拥有纯虚成员函数open的抽象基类ABC,因为open为纯虚成员函数,所以类ABC为抽象基类。
虽然不能创建一个抽象基类的对象,但抽象基类可以拥有派生类,从抽象基类派生来的类必须覆盖基类的所有纯虚成员函数,否则派生类也成为抽象基类,因而也不能用来创建对象。
一个纯虚成员函数就可以使一个类成为抽象基类,一个抽象基类可以有其他不是纯虚成员函数或甚至不是虚函数的成员函数,还可以有数据成员。抽象基类的成员可以是private、protected或public。
只有虚函数才可以成为纯虚成员函数,非虚函数或顶层函数都不能声明为纯虚成员函数。
抽象基类的作用很大,通过这种机制,可以用来指明某些虚函数必须被派生类覆盖,否则这些派生类就不能拥有对象。从这种意义上来看,抽象基类实际上定义了一个公共接口,这个接口被所有从抽象基类派生的类共享。
本文详细解释了抽象基类的概念及其在C++编程中的应用,包括如何通过纯虚成员函数来定义抽象基类,以及派生类如何继承并实现这些纯虚函数以避免成为抽象基类。
466





