最后,我们到达我们的旅程结束在继承!这是我们将对这个问题的最后一个话题。祝贺你们事先通过最难的语言的一部分!
纯虚拟(摘要)函数和抽象基类
到目前为止,所有我们所写的虚拟函数体(定义)。然而,C++允许你创建一个特殊的虚函数调用一个纯虚函数(或函数)都没有身体!纯虚函数只是作为一个占位符,是由派生类重新定义。
创建一个纯虚函数,而不是定义一个函数体,我们只需指定函数值0。
1
2
3
4
5
6
7
8
9
class Base
{
public:
const char* SayHi() { return "Hi"; } // a normal non-virtual function
virtual const char* GetName() { return "Base"; } // a normal virtual function
virtual int GetValue() = 0; // a pure virtual function
};
当我们添加一个纯虚函数来我们班,我们实际上是在说,“它是由派生类来实现这个功能”。
使用一个纯虚函数有两个主要的后果:第一,与一个或多个纯虚函数的抽象基类的任何类,这意味着它不能被实例化!如果我们可以创造基础实例会发生什么:
1
2
3
4
5
int main()
{
Base cBase; // pretend this was legal
cBase.GetValue(); // what would this do?
}