• 技术文章 >后端开发 >C#.Net教程

    C++11新特性 - 多态和虚函数,override说明符

    php是最好的语言php是最好的语言2018-08-01 14:11:43原创1532
    多态和虚函数

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

    1.png

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

    1. 基类的指针

    2. 指向派生类的对象

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

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

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

    1. virtual关键词不是必须

    2. 不必将函数声明为public

    覆盖失败的情况

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

    1.png

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

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

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

    override说明符

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

    1.png

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

    作者感受

    更好运用语言本身的功能,不放弃任何自动查出错误的机会,这应该成为C++程序员的习惯。也算是工匠精神的体现吧。

    相关文章:

    详谈c++11 final与override说明符

    C++11新特性中auto 和 decltype 区别和联系

    相关视频:

    Android6.0新特性

    以上就是C++11新特性 - 多态和虚函数,override说明符的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:C override
    上一篇:C++11新特性- 纯虚函数和final说明符的用法 下一篇:C++中的四种强制类型转换_基本用法及使用场景
    PHP编程就业班

    相关文章推荐

    • 分享一道逻辑面试题,看看你能答对吗!• c语言中形参的缺省存储类别是什么• C++设计模式浅识装饰模式• SUNWEN教程之----C#进阶(五)• asp.net 图片验证码的HtmlHelper

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网