C++中虚函数与纯虚函数的用法(2)
为了方便使用多态特性,我们常常需要在基类中定义虚函数。在许多情况下,在基类中不能对虚函数给出有意义的实现。为了让虚函数在基类什么也不做,引进了“纯虚函数”的概念,使函数无须定义。我们通过在函数体的位置(即在声明语句的分号之前)书写=0就可以将一个虚函数说明为纯虚函数(pure virtual)。其中,=0只能出现在类内部的虚函数声明语句处:
class Base{ // 抽象基类 public: virtual int func(int n) const =0; };
需要注意的是,我们也可以为纯虚函数提供定义,不过函数体必须定义在类的外部。
2 . 抽象基类
含有(或者未经覆盖直接继承)纯虚函数的类叫抽象基类(abstract base class)。抽象基类负责定义接口,而后续的其他类可以覆盖该接口。如果派生类中没有重新定义纯虚函数,而只是继承基类的纯虚函数,则这个派生类仍然还是一个抽象基类。因为抽象基类含有纯虚函数(没有定义),所以我们不能创建一个抽象基类的对象,但可以声明指向抽象基类的指针或引用。
Base base; // 错误,不能实例化抽象基类
总结:
①.虚函数必须实现,不实现编译器会报错。
②.父类和子类都有各自的虚函数版本。由多态方式在运行时动态绑定。
③.通过作用域运算符可以强行调用指定的虚函数版本。
④.纯虚函数声明如下:virtual void funtion()=0; 纯虚函数无需定义。包含纯虚函数的类是抽象基类,抽象基类不能创建对象,但可以声明指向抽象基类的指针或引用。
⑤.派生类实现了纯虚函数以后,该纯虚函数在派生类中就变成了虚函数,其子类可以再对该函数进行覆盖。
⑥.析构函数通常应该是虚函数,这样就能确保在析构时调用正确的析构函数版本。
- 上一篇:C++继承中的访问控制实例分析
- 下一篇:C++中extern "C"的用法