个人以为,C++之所以适合架构设计,很大一个原因就是它可以对将来编程。比如可以通过public/protected/private来限定派生类对基类成员的访问,可以定义抽象类要求派生类必须实现的接口等。

当我们声明/定义了一个虚函数时候,派生类可以选择覆盖这个虚函数,也可以选择不覆盖。关于这一点,C++也提供了必要的方法,来要求派生类覆盖某些方法,这也可以看作是一种对将来编程。

纯虚函数

这并不是一个新技术,功能也非常简单:就是一旦某个基类声明了某个纯虚函数,它的派生类在实例化的时候就必须覆盖这个函数。

1.png

本例中注释掉了sub::f1()方法,所以在第27行就会发生编译错误。

final说明符

一般说来,有要求的覆盖的方法,就应该有禁止覆盖的手段。但是不知道为什么,这个功能到了C++11中才被引入。使用方法也很简单:只要在函数声明的后面添加final说明符即可。

1.png

代码基本没变,只是base::f1()声明的后面换成了final说明符。这时如果定义了sub::f1()方法,就会产生如上图的编译错误。

作者观点

本文根据作者个人的理解,将纯虚函数和final说明符放到一起说明。如有不准确之处,欢迎补充和纠正。

相关文章:

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

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

相关视频:

C 语言教程

更多相关文章

  1. C++11新特性 - 多态和虚函数,override说明符
  2. 探索C++虚函数在g++中的实现(动多态)_虚函数表剖析
  3. 第一章C++:函数返回值、GNU编译器命令
  4. 第六章C++:函数基础与应用
  5. C++异常处理:系统函数terminate的调用
  6. C++学习基础知识--this指针、静态成员、常量成员函数
  7. 深度解析C++的函数模板与类模板
  8. C++类的静态数据成员和静态成员函数
  9. C#中复制构造函数是什么

随机推荐

  1. SpringBoot + Thymeleaf + JPA创建一个we
  2. HTML 5是否需要``
  3. commons-fileupload文件上传、下载
  4. 在IE(所有版本)中打破JQuery自动完成组合框
  5. 【web】a标签点击时跳出确认框
  6. 针对不同的分辨率优化网站
  7. 为什么我的html页面的大小不固定啊?
  8. HTML5移动开发技术要点总结及各事件含义
  9. html页面输出pdf格式文件(一步步很详细)
  10. 小强的HTML5移动开发之路(53)——jQueryMob