抽象基类通常用于表示目标问题领域的抽象概念,创建这种类型的对象是没有什么意义的。我们至少声明一个纯虚函数使得一个基类成为抽象的,编译器将会确保无人能够创建该抽象基类的任何对象。
然而有时候找不到一个可以成为纯虚函数的合理候选者,但仍然希望类的行为像个抽象基类。在这些情形下,可以通过确保类中不存在公有构造函数来模拟,把构造函数和拷贝构造函数都声明为受保护的,允许派生类的构造函数调用,又阻止创建独立的对象。
另一种使一个类成为抽象基类的方式需要人为地将该类的一个虚函数指定为纯虚的。通常来说,析构函数是最佳候选者。 当一个类没有任何虚函数并且不需要显式声明构造函数时,尤其适用于这种方法。 使一个类的析构函数指定为纯虚函数,并且声明为受保护,但还是需要实现该析构函数。
class ADB
{
protected:
~ADB() == 0;
}
ADB::~ADB() {};