C++的精髓——代码复用、接口复用

在另一篇文章中提到C++三大特点的核心概括,也写在这里吧。
封装:信息隐藏
继承:代码复用
多态:面向对象
C++并不是面向对象,它包容多种编程思想,如面向过程,面向对象,泛型编程等。

笔者还在学校的时候理解C++最终精髓是两点:代码复用、接口复用。到现在隔的时间挺长了,今天不防把它记录下来,希望不会引起各位高手的嘲笑吧。
C++的特点:封装、继承、和多态。现在我们分别从这些所谓的C++的特点上来讨论它的本质吧。
封装:封装的含意就是对一个空间下的成员变量进行保护,这可能也是class和struct的唯一区别了吧。当然不是说struct不能保护,只是一个 默认值而已。但C就没有这些支持吗?答案是肯定的。比如在一个文件的全变量声明成static,那么这个全局变量就是对该文件内部是可见的,对外部是隐藏 的。因此从这一点上来看,封装不能算C++特有的东西。只不过是文件和声明的struct内部而已。好,下面对继承再进行分析。
继承:继承就 是子类具体父类可继承的方法的属性,那么它本质做了哪些事呢?实际说白了很简单,只是复用了你类的代码,甚至我们可以认为是父类可继承的代码原样照抄一 遍。这能算C++特有的吗?C封装的那么多的lib库不同样可以完成这些事吗?因此继承我认为同样不是C++的特性。好了,被人们传颂的C++三大属性在 不知觉间被我砍了俩了,可能要被许多C++爱好者猛批一把了。但是下面我还要把第三个所谓的它的特点给否认掉:)
多态:多态是什么呢?即一个 抽象事物对于不同的具体事物可以有不同的动作和处理事件,这就是多态。那么多态究竟做了哪些事呢?难道C就没有这样的特性了吗?实际上如果对C有一定深度 理解的话,那么如下就不难理解了。声明一个函数指针,放在一个struct内部,在不同时刻对其赋不同的函数指针值,这样就可调用不同函数,这是不是叫多 态呢?从本质上讲,这就是所谓的C++的多态,而且也是这么实现的。哈哈,到这儿可以看到神奇的C++竟再也没有可被提及的自已的特点了。
是 不是C++真的就没有所谓的特点和特质了呢?答案是当然存在,而且文章题目也很醒目:代码复用、接口复用。现在我们给其抛开那些好听的继承名子,以复用取 而代之。复用C库即是,但C++则采用了另外一种复用形式,重要的不是于表象,而在于对事物的抽象理解的复用。如果从这个角度去再解C++的复用,那么你 才能真正去理解C++的一点点内涵吧。它可以将宏观世界的物可以很形象的用语言的形式对外再现。把是什么,归属这种性质以符号的形式进行加工进而实现复 用。这便是C++的第一个精髓点吧。因此看你对继承这个词的理解程度了,不要人云亦云。
下面再进行接口复用进行更进一步的论述。刚才论讨了 C++的继承即是代码复用的特性,下面将说明多态就是接口复用的性质。的确,在C里面使用指针完成可以做所谓C++的所有这些特性。实际C++的胜过C的 点并不在于所谓的多态,仍旧在于对编程思想的理解。比如使用C++可以帮助理解这样的事物,同一类动物,对于不同的具体实际,可能做出不同的动作,使用 C++可以更加简单形象的描述而已。因此多从更高层次上去理解C++,就可以帮助我们理解具体事物的特性在哪。接口复用即同一个接口,对于不同的使用者可 以使用同样的接口调用方式可以得到不同的调用结果,这样方便了代码和系统的统一。
因此,如果读到这儿,所有事情就都很清晰了。所谓的封装、继承、多态要完全抛开了,而应该从另外一个更高的层次去理解它。当你理解到这个层次,C、C++只不过是一个工具,功能没有什么差别。就不再会有C++实现的系统使用C难以实现的困惑了。
笔者愚见。

【转自】http://ankorzhang.blog.163.com/blog/static/1183773432010410115338866/

C++的精髓——代码复用、接口复用的更多相关文章

  1. Linux中的IO复用接口简介(文件监视?)

    I/O复用是Linux中的I/O模型之一.所谓I/O复用,指的是进程预先告诉内核,使得内核一旦发现进程指定的一个或多个I/O条件就绪,就通知进程进行处理,从而不会在单个I/O上导致阻塞. 在Linux ...

  2. [改善Java代码]在接口中不要存在实现代码

    第3章  类.对象及方法 书读得多而不思考,你会觉得自己知道的很多. 书读得多而思考,你会觉得自己不懂的越来越多. —伏尔泰 在面向对象编程(Object-Oriented Programming,O ...

  3. c#代码 天气接口 一分钟搞懂你的博客为什么没人看 看完python这段爬虫代码,java流泪了c#沉默了 图片二进制转换与存入数据库相关 C#7.0--引用返回值和引用局部变量 JS直接调用C#后台方法(ajax调用) Linq To Json SqlServer 递归查询

    天气预报的程序.程序并不难. 看到这个需求第一个想法就是只要找到合适天气预报接口一切都是小意思,说干就干,立马跟学生沟通价格. ​ ​不过谈报价的过程中,差点没让我一口老血喷键盘上,话说我们程序猿的人 ...

  4. java代码List接口和Arraylist类

    总结: package clientFrame; import java.util.*; //集合类 List是一个接口.ArrayList是一个类 public class ArraylitTest ...

  5. 基于webrtc的媒体库測试代码以及接口介绍

    经过一段时间的项目验证,第一版接口能够定版了.满足一般的项目需求是没有问题了,接口非常清晰,凝视也写的非常清晰,大家有须要的就拿去測试吧,android版本号还在验证中.假设有什么问题或者须要源码.能 ...

  6. 接口测试-Java代码实现接口请求并封装

    前言:在接口测试和Java开发中对接口请求方法进行封装都非常有必要,无论是在我们接口测试的时候还是在开发自测,以及调用某些第三方接口时,都能为我们调用和调试接口提供便捷: Java实现对http请求的 ...

  7. java 后台代码调用接口

    import com.jiuqu.jollykeys.common.util.JsonUtil;import java.io.UnsupportedEncodingException;import j ...

  8. python装饰器精髓代码

    #!/usr/bin/env python #-*- coding:utf-8 -*- import time def foo(func): def inner(): print('fs...') f ...

  9. tep完整教程帮你突破pytest

    持续维护的教程 tep教程会随着版本更新或经验积累,持续维护在电子书中,最新的最全的内容请锁定这篇文章[最新]tep完整教程帮你突破pytest: https://dongfanger.gitee.i ...

随机推荐

  1. Android开发中UI相关的问题总结

    UI设计和实现是Android开发中必不可少的部分,UI做不好的话,丑到爆,APP性能再好,估计也不会有多少人用吧,而且如果UI和业务代码逻辑中间没有处理好,也会很影响APP的性能的.稍微总结一下,开 ...

  2. with语句和空语句

    with语句能够为一组语句创建缺省的对象,在一组语句中,任何不指定对象的属性引用都将被认为是缺省对象. 语法如下: with(object){ statements; } <body> & ...

  3. c# 动态获取http通过post传来的json数据

    //获取http通过post传来的json数据 using Newtonsoft.Json; public HttpResponseMessage Query() { var request=Syst ...

  4. Tomcat之session解决方案

    目录 session方案及配置 一.session绑定 二.session复制 三.使用memcached解决session问题 四.使用redis解决session问题 五.memcached和re ...

  5. Image Processing and Analysis_21_Scale Space:Edge Detection and Ridge Detection with Automatic Scale Selection——1998

    此主要讨论图像处理与分析.虽然计算机视觉部分的有些内容比如特 征提取等也可以归结到图像分析中来,但鉴于它们与计算机视觉的紧密联系,以 及它们的出处,没有把它们纳入到图像处理与分析中来.同样,这里面也有 ...

  6. windows 下sublime text 3 配置python 环境详解

    这我们的环境已经安装了python 3.7.1解释器和sublime text 3 编辑器 一.package control 安装 首先我们打开sublime text 3 ——>Tools— ...

  7. 服务器IP与个人IP的特点

    服务器IP:系统类型.开放的端口及运行的服务.C段同类机器数量.是否机房.IDC服务商 个人IP:系统类型.开放的端口及运行的服务……

  8. idou教你学Istio10 : 如何用Istio实现K8S Egress流量管理

    上一篇我们了解了如何控制入口流量,本文主要介绍在使用Istio时如何访问集群外服务,即对出口流量的管理. 默认安装的Istio是不能直接对集群外部服务进行访问的,如果需要将外部服务暴露给 Istio ...

  9. 图像处理---视频<->图片

    图像处理---视频<->图片 // 该程序实现视频和图片的相互转换. // Image_to_video()函数将一组图片合成AVI视频文件. // Video_to_image()函数将 ...

  10. curl、fopen和file_get_contents区别

    curl多用于互联网网页之间的抓取,fopen多用于读取文件,而file_get_contents多用于获取静态页面的内容. 1. fopen /file_get_contents 每次请求都会重新做 ...