继承、多态
虚函数与纯虚函数
1、虚函数:在基类中必须实现,子类可以不重写;
2、纯虚函数:在基类中只声明不实现,子类必须重写;基类为纯虚类,不能实例化对象。
c++11引入关键字 override和final 用来解决继承中虚函数的问题。 纯虚函数不可使override 、final关键字。
override | 指明该函数是重载的基类中的一个函数 |
final | A.禁止该函数从基类继承;B.禁止该函数的重载 |
class base_class { public: // 用作测试 override 关键字的函数 virtual void show() { std::cout << "base_class::show()\n"; } // 用作测试 final 关键字的函数 virtual void say() final { std::cout << "base_class::say()\n"; } }; class demo_class : public base_class { public: // override的作用:指明该函数时重载的基类中的一个函数 // 这里明确指明该函数是继承基类的show函数 virtual void show() override { std::cout << "demo_class::show()\n"; } // 编译错误: error C3248: “base_class::say”: 声明为“final”的函数无法被“demo_class::say”重写 // virtual void say() override { std::cout << "demo_class::say()\n"; } };