查看原文
其他

【连载】重温C++之面向对象(第一篇)

bug菌 最后一个bug 2021-01-31

1、来聊聊(轻松一刻)

    今天跟大家分享一首李荣浩《等着等着就老了》,像我们这种上了点年级的人听到这类歌曲多多少会有些共鸣吧,每个人都抵不住岁月的流逝,也许现在的你就 在等待着,等待着某个人,等待着某些事,恍惚之间意识了到自己已不再年轻,所以趁着大好的时光,勇敢去追求自己真正想要的吧!

2、C与C++

    作者前面的文章涉及到的语言基本上都是C语言,其实在实际工作内容中也会经常用到C++、C#等等,这些更适用于进行面向对象开发的语言,对于文章中能够用C语言讲述的一般会用C语言,不过对于一些应用程序比如说QT、Windows桌面应用开发,Linux应用程序开发等等这方面的内容用C来讲述确实有点费力,同时,现在非常流行的全栈工程师其实也就说明我们如果仅仅只会一门语言或许对系统的把控能力并不是很强,因为现在大部分的系统都是非常综合的,涉及到的技术也不仅仅只有嵌入式,如果你想全面的把控一个项目需要的技能也是多方面的。

    C语言毋庸置疑是我们嵌入式开发人员都要掌握的,特别是底层驱动开发更是难以离开C,对于我们操作系统上层基本上都是使用面向对象型语言,一方面该类语言能够更好的描述我们的现实世界,另一方面具有更快速的开发能力和可移植能力,所以作者一直走的都是C路线 : C --> C++ --> C#,其实当你学习完C语言对于C++就学习了一大半的语法知识了,我们只需要注意一下C++在C语言新增的语法知识并且形成一种面向对象的编程思想便达到了我们学习C++的目的。

    所以作者这里用几篇文章的内容把C++的核心知识用更加通俗的方式为大家讲解,语言都是互通的,以后我会把很多C++的软件设计方法在C语言中实现让大家的编程思路更加开拓,同时大家有兴趣学习C#什么的都会非常容易上手。(看不懂也要硬着头皮看哦,我也会尽我最大的努力让大家看懂!)

3、浅析面向对象

    对于面向对象编程,首先大家应该明确的是它是一种思想,不属于语言本身,只是说现代的很多的语言比较适合面向对象思想的实现,了解过C++语言的小伙伴都知道C++对C语言有着非常好的兼容性,如果说C语言常常采用一种面向过程的编程方式,那么C++同样也可以面向过程进行编程,而C++独特的特性又让其更适合面向对象进行编程。

    面向对象其实就是对现实世界的一种抽象,作者在前面的文章中也一直强调编程中的抽象思维,如果你对这个世界形成了一套非常完备的抽象,可以说你也可以形成自己的一套编程思想,比如定义为面向XXX编程。

    面向对象的三大特征:封装、继承和多态,面向对象编程其实就是把所要完成的任务交给了一个或者多个对象来完成,比如说我们每个人就是一个个的对象,一个人封装了很多属性比如性别、年龄、身高等等,同时也有很多的技能,比如会编程、会做饭等等,这样就体现了封装性;然而这个世界不仅仅只有人还有其他动物、植物等等,那么这样就形成了人类、动物类、植物类等等,这也就是类的概念;当然这种分类仅仅只是其中一种,我们也可以为了方便或者灵活的对其用另外一种标准进行分类,便于分析问题和解决问题(这个应该是面向对象的难点所在)

    上面我们把第二级叫第三级的父类,而第三级为第二级的子类,当前其第三级往下还有更多的分类,类的实例化就是我们的对象,一种类可以实例化许多对象,就像人类可以实例化为多个人类个体,同时子类继承了父类的特性,可能还会增加父类没有的属性,比如人类相对生物类另外拥有了独特的思考创造能力等,这就是继承;如果今天下雨了,不同的人会对这个情况有不同的表现,有些人打伞,有些人直接往前冲......,这就是多态,好了,面向对象的三大特性就讲这么多啦。

    

4、嵌入式中如何体现面向对象

    首先简单一点看待,那就拿简单的C语言中的基础数据类型int,char等等,我们也可以把他们看成类,我们用这些基础数据类型定义变量如int a;则表示把数据类int实例化为了一个对象a,我们还可以用int类定义很多变量,也就是说我们可以通过类实例化很多的对象。

    我们上篇文章不是刚刚讲了一下《结构体小技巧》吗?结构体里面可以包含啥还记得吗?如果把结构体看成一个对象的封装,那在我们C语言编程中是不是也可以引入对象的概念来抽象我们的设计呢?

    在我们嵌入式编程中有各种各种的外设驱动,可能每个驱动会负责不同的事务,比如说有控制外部设备的、有进行信号采集的、有进行人机交互的等等,我们用对象的角度看来这些事务是不是可以把这些看成一个控制外部设备的对象,一个进行信号采集的对象,还有一个和人机交互的对象呢?

     从上面的图看来是可以的,比如说我们有多个串口,我们可以通过串口类来实例化多个串口进行处理,串口类继承于通信类,通信类中包含发送数据,接收数据等等相关操作,那么我们串口类、SPI类等等都会有着相同的接口或者方法进行相应处理。


5、"对象封装"VS"面向对象"

    对于前面作者向大家说明了面向对象的三大特点,有些刚刚开始学习的小伙伴经常认为实现了一个对象就认为是面向对象了,实现一个对象只能说你满足了面向对象的第一个特点:封装性,然而对于继承和多态这么重要的两个特性没有实现,就谈不上面向对象了,如果你仅仅只是封装一个对象那C语言的一个struct就搞定了,那C++还有没什么意义了,很多小伙伴经常称"C++就是带类的C",这句话虽然说得有点绝对,不过还是对我们理解上有一定的帮助的。

    好了,今天作者就为大家简单讲解了一下我个人对面向对象的理解和对C++有必要学习一下的态度,对于本系列章作者不会讲得太深入,主要为了让各位读者补充回顾一些C++的相关知识,便于以后用C++来讲述或者引入一些技巧知识。虽然在我眼里C是万能的,不过有时候还是要妥协一下借助一些C++等语言。

    这里是公众号:“最后一个bug”,一个为大家打造的技术知识提升基地。同时非常感谢各位小伙伴的支持,我们下期精彩见!

推荐好文  点击蓝色字体即可跳转

【硬壳】C程序里面嵌点"机器码"玩一玩"(小知识揭露大道理)

顿悟,神秘的register关键字(C语言篇) 

【典藏】深度剖析单片机程序的运行(C程序版) 

【连载】通过"库文件"学单片机驱动编程(5)-完结篇

☞ C语言为什么一般不在.h中定义函数或者变量?(精华)

【典藏】大佬们都在用的结构体进阶小技巧

深度剖析"bit序"与"字节序"(追思永念)

听说因为代码没"对齐"程序就奔了?(深度剖析)

【典藏】自制小型GUI界面框架(设计思想篇)

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存