0、继承与算法开发

  在之前的笔记中,我展示了来自继承的威力。继承这种机制能够大幅度减小编码量,子类可以继承父类所有的变量,方法。利用这种机制,我们可以在其他人工作的基础上,完成有自己特色的部分。比如我们要开发icp算法,但是pcl中已经提供了icp类,其中有各种方法,可以调用完成功能。但是icp是瀑布模型的,对于特定的任务有它的瓶颈,如果需要利用C++实现高性能的icp算法,则可以继承已有的代码,开发我们自己的子流程。

  上面那一段听起来很有道理,其实不然。coding的终极目标并不是减少编码量,而是需要有清晰的架构可读性,好的扩展性,并且耐造。继承一部分代码确实是很偷懒的做法,但是很难保证子类可以用到父类所有的方法,也就更无从谈起父类是子类的抽象了。这对以后的工作留下了隐患,无意义的方法存在对象中,会对后续的继任者造成困扰。所以如果不是架构清晰,目标明确,最好是不要这样继承了。代码应该扁平化!!!

1、何时使用继承

  继承除了刚刚提到的偷懒以外,它被发明出来当然有更艰巨的任务。实现这个艰巨任务还依赖一个很灵活的特性,称为多态。多态才是真正的大杀器。多态是指,在base类中使用虚函数,而后,以base类指针指向一个derive class object. 那么当我们调用base class 中的虚函数时,指令会前往 derive class 存放函数的空间中,找到对应的实现。比如,base class 是 shape, shape 里面有 cut rotate move draw 方法,但是对于二维图形,三维图形,draw的实现是不一样的。如果在后续的程序中,我们要对shape 进行一系列的操作。而具体是操作二维图形还是三维图形,可能需要在程序运行的时候决定。所以我们可以用基类 shape 的指针来进行后面的工作。此外,shape 指针还可以放在同一个容器中,而两个不同类的指针是没法放在同一个容器里的。

  总而言之,继承+多态这种方法,让我们可以在抽象的概念中编写程序。这种特性很灵活,很强大。比如小汽车可以move, 客车也可以 move,挖掘机也可以move。。。。那么我们就只需要对不同的子类实现各自的move,最后决定坐什么车,就调用哪个move即可。但是。。。虽然这个特性很灵活很强大,可是对于科研来说。。。作用实在有限,可能我只在乎我的方法,而没有那么多其他方法可以实现。继承最大的作用还是增强程序的可扩展性,或者说增加程序支持的方法。

  对 C++了解的越多,越发觉得,它适合的是软件工程,是架构超大规模,面向大量不同客户的大系统。而不是用来实现一个功能,或者一个简单的算法。继承是为了大软件服务,泛型是为了大型库服务.........越发觉得C++不是玩具,而是生产工具。

C++学习 —— 灵活的继承特性【C++不是玩具,而是生产工具】相关推荐

  1. java继承eclipse_Java-Maven(七):Eclipse中Maven依赖、聚合、继承特性

    之前通过学习了解,maven集成到eclipse中的如何创建项目,以及maven命令插件在eclipse中安装后的用法.那么接下来我们将会学习一些maven在项目中的一些特性,及如何使用. Maven ...

  2. 200905阶段一C++链表与继承特性

    目录 一.学习的知识点 链表 继承 二.上课没有听懂或者没有理解的地方 三.当天学习的收获 四.作业的思路.不会的地方 五.其他需要反馈的问题 六.心得体会 一.学习的知识点 链表 //结点类 cla ...

  3. C/C++学习之路: 继承

    C/C++学习之路: 继承 目录 继承概述 派生类访问控制 继承中的构造和析构 继承中同名函数的处理方法 非自动继承的函数 继承中静态成员特性 多继承 1. 继承概述 1. 继承基本概念 c++最重要 ...

  4. Longstick的学习周记——ES6新特性

    Longstick的学习周记--ES6新特性 前言 ES6新特性 1. let 和 const let关键字 const 关键字 2. 模块字符串\` \` 3. 解构 4. 函数的参数默认值 5. ...

  5. 你不知道的事---SringCloud的feign的继承特性

    前言 说起SpringChoud的feign大家用过的都说好.Feign是Netflix开发的声明式.模板化的HTTP客户端.对于我们微服务来说,微服务之间的api调用,使用feign来说是再方便不过 ...

  6. 对于python 3.x与python2.x中新型类的继承特性总结

    (1)一般性继承特性 """ 该文件对于python 3.x 及python 2.x的New-style 类的一般性继承特性进行了说明和测试. (1)实例的继承特性:搜寻 ...

  7. feign调用第三方接口_讲一个你不知道的事:SringCloud的feign的继承特性

    前言 说起SpringChoud的feign大家用过的都说好.Feign是Netflix开发的声明式.模板化的HTTP客户端.对于我们微服务来说,微服务之间的api调用,使用feign来说是再方便不过 ...

  8. Spring Cloud实战小贴士:Feign的继承特性(伪RPC模式)

    通过之前发布的<Spring Cloud构建微服务架构:服务消费者(Feign)>,我们已经学会如何使用Spring MVC的注解来绑定服务接口.我们几乎完全可以从服务提供方的Contro ...

  9. add p4 多个文件_绘图技巧01:继承特性创建对象之神器ADD

    给大家分享一个实用绘图技巧 CAD里面有个MA格式刷(MATCHPROP),我们常用来刷取对象的特性,通过MA我们可以刷取原对象的图层,线型,颜色等图元属性. MA格式刷(MATCHPROP)的日常运 ...

最新文章

  1. Chemical Science | 基于金属的片段分子库用于筛选候选药物
  2. 多个模型在测试集上的Accuracy以及AUC指标可视化对比实战
  3. 错误:“Cannot load JDBC driver class ‘com.mysql.jdbc.Driver”的解决方法
  4. 实现instanceof关键字
  5. 【Python】原创 | 写一个符合人类思维的四舍五入函数(No round !!!)
  6. springboot整合shiro+mybatis-plus
  7. win10更名导致MySQL无法启动服务
  8. 设计灵感|如何设计出简洁吸引人的字体海报?
  9. php代码审计是什么意思,php代码审计基础篇
  10. QTCreator中字符编码问题以及WINDOWS API A/W两种版本的说明
  11. jsonp 获取图片文件流_【国际IT专场】Laravel Media Library多媒体文件的上传与管理...
  12. 【BZOJ4200】【UOJ132】【NOI2015】小园丁与老司机
  13. python 手机号码归属 ip地址查询
  14. Java中使用多态的好处和弊端及其举例
  15. MyBatis学习总结-06:动态SQL
  16. 使用SwipeRecyclerView配合下拉刷新出现Scrapped or attached views may not be recycled. isScrap:false isAttached:
  17. 使用webp进行图像压缩
  18. Arduino UNO AT24C32进行字符串数据读写【优化篇】
  19. 公司算法面试笔试题目集锦,个人整理,不断更新中
  20. Rabbitmq安装以及入门

热门文章

  1. c语言 字符去重复以及冒泡排序
  2. 【记录】利用jar包制作docker镜像
  3. js 数字序号 转 字母序号
  4. 测试用例组织结构_用例和组织结构
  5. 函数setState是React的未来
  6. 123_Power PivotPower BI DAX函数说明速查
  7. 一个Python爬虫工程师学习养成记
  8. IIS6部署web service完整过程
  9. 深度学习《自动编码器》
  10. json无法解析的字符