抽象基类实现

L.p*_*ppt 2 c++ inheritance abstract-class virtual-functions

这是一个面试问题:

如何在不使用纯虚函数的情况下实现抽象基类.我们可以做什么,以便我们不能创建任何类的对象,因为在这种情况下,我们可以说我们的类是一个抽象的基类.

起初我想过使用虚拟析构函数,但由于虚拟关键字,我不确定这个解决方案.你能帮忙吗?

Jam*_*lis 5

你问两个问题,我们将依次回答:

如何在不使用纯虚函数的情况下实现抽象基类?

根据抽象类的定义,这是不可能的:"如果一个类至少有一个纯虚函数,那么它就是抽象的"(C++11§10.4/ 2).因此,为了是抽象的,类必须声明一个纯虚函数,或者它必须从它派生的另一个类继承一个.

我们可以做什么,以便我们不能创建任何类的对象?

这个问题可以用许多不同的方式来解释,每种方式都有不同的解决方案.

  1. 从字面上看,这个问题要求一种不能创建实例的类型.无法构造没有定义构造函数的类.

    要实现这一点,应该声明(但不是定义)类的默认构造函数和复制构造函数.如果使用支持C++ 11删除的特殊成员函数的编译器,则应将它们声明为已删除.

  2. 在第一个问题的上下文中,似乎更有可能的是定义一个只能被实例化为另一个类的基类子对象的类.

    这可以通过将所有构造函数声明为受保护,不提供任何创建类实例的静态工厂成员函数,以及不与任何其他类或函数成为联系来实现.