C++语言为我们提供了一种语法结构,通过它可以指明,一个虚拟函数只是提供了一个可被子类型改写的接口。但是,它本身并不能通过虚拟机制被调用。这就是纯虚拟函数(pure
包含(或继承)一个或多个纯虚拟函数的类被编译器识别为抽象基类。试图创建一个抽象基类的独立类对象会导致编译时刻错误。(类似地通过虚拟机制调用纯虚拟函数也是错误的例如)
virtual function)。 纯虚拟函数的声明如下所示:
1 class Query {
2 public:
3 // 声明纯虚拟函数
4 virtual ostream& print( ostream&=cout ) const = 0;
5 // ...
6 };
这里函数声明后面紧跟赋值0。
包含(或继承)一个或多个纯虚拟函数的类被编译器识别为抽象基类。试图创建一个抽象基类的独立类对象会导致编译时刻错误。(类似地通过虚拟机制调用纯虚拟函数也是错误的例如)
1 // Query 声明了纯虚拟函数
2 // 所以, 程序员不能创建独立的 Query 类对象
3 // ok: NameQuery 中的 Query 子对象
4 Query *pq = newNameQuery( "Nostromo" );
5 // 错误: new 表达式分配 Query 对象
6 Query *pq2 = newQuery;
抽象基类只能作为子对象出现在后续的派生类中。