C++11中多态和虚函数、override说明符的示例分析

这篇文章主要介绍C++11中多态和虚函数、override说明符的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

多态和虚函数

多态是C++的重要特征之一,同时也是初学者比较难理解的特征。先来看一个简单的例子:

C++11中多态和虚函数、override说明符的示例分析C++11中多态和虚函数、override说明符的示例分析

代码很简单,按照作者自己的话描述一下上述代码中多态从定义到起作用的要点,应该不会再简单了,从main函数看起:


  1. 基类的指针



  2. 指向派生类的对象


  3. 派生类覆盖了基类中定义的虚函数


这三点是必要条件,缺一不可。

上面的代码还有另外一些有有意思的地方,虽然不影响结果,但还是了解一下为好。派生类中重新定义(覆盖)基类中虚函数时:


  1. virtual关键词不是必须



  2. 不必将函数声明为public

覆盖失败的情况

虚函数的覆盖要求两个函数的签名必须一致。例如下面的代码:

C++11中多态和虚函数、override说明符的示例分析C++11中多态和虚函数、override说明符的示例分析

由于sub2::f1的签名和base::f1的签名不一致,所以无法实现多态。

也许你会觉得这个错误太明显了,根本不会发生。那是因为本例中的成员函数太简单了。在实际的开发中随着开发规模的扩大,类的继承关系会变得越来越深,成员函数的参数也会越来越多,经常会遇到派生类中定义的成员函数的签名和覆盖对象的签名不一致的而导致覆盖失败的情况。

而且要命的是,这种错误不会产生编译错误,不容易被发现。

override说明符

为了解决这个问题,C++11中引入了一个方法:在声明、定义派生类中的覆盖函数时使用override说明符:

C++11中多态和虚函数、override说明符的示例分析

由于明确的函数的用意,所以当编译器无法在基类中找到相同签名的虚函数的时候,就会产生编译错误。

以上是“C++11中多态和虚函数、override说明符的示例分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!