我眼中的c++编程总结-20150602
断断续续的学习了非常多东西,有51、Avr、ARM、PLC、C\C++、C#、TB、MC、mql4、linux....等等,近乎填鸭或者囫囵吞枣的、甚至饿狼般的扑到里面,慢慢的积累和理解中,非常多知识点都有感性的认识,或多或少的理解一些,也许是为了记忆罢了。将这些知识点整理收集一下。算是做个阶段性质的总结
也非常的欢迎各个行业的专家或者大神可以发现本文的一些我理解的错误,能给我留言,由于我是缺乏对非常多知识的总体把握。仅仅是想当然的就这么理解了,有些是查过资料的。有些可能没查资料或者没资料可查,由于也不是专业的科班出身,也没学过太多的文字修辞,所以说的近乎大白话。也就这么招吧
1:从单片机到编译器说起
针对各个编译要求,电脑上装的编译器主要是DEV-C++。VS2012,KEIL V5。以及虚拟机下的red linux和linux 下的GCC
用的比較多的还是keil,vs2012。gcc这三款
有时候在想,什么是编译器呢,为什么我定义个printf下。屏幕上就会显示指定格式的字符呢
首先得回到单板机,我理解的单板机就是一个控制芯片+一堆外围电路。而我用的keil编译器。它里面包括有控制芯片相应的头文件,头文件将非常多的输入输出port所有定义成能够读懂的宏和变量,并且晶振的频率来达到程序的循环。晶振的振荡频率大小决定单片机的运算速度,当然也和控制芯片本身的设计有关。比方晶振大于24MHZ就能够出错等等,有了这个控制芯片,控制芯片里面内置了非常多寄存器。而早期的编译器。就是通过简单的机器码的编写,plc上的接口电压类似。输出每一个针脚的电压电流来控制电路的
可是因为机器码编写比較困难,并且特别的繁冗,可能后来的开发者就将一些接口集体分类,打包,然后在总体的接口上实现跳转,类似如今才汇编语言,这样的编程已经大大的攻克了机器码编写的问题。可是它和硬件接触紧密,并且可读性很不好,对编码人员的要求比較高。这个时候大致在1965年左右
后来出现了b语言,我没有接触过,加上单板机的控制芯片和外围的电路的日益完好,硬件方面已经出现了更加复杂的逻辑,通过汇编可能project量特别的大。并且特别不easy维护,b语言也许就是更加抽象的,他可能定义了一些基础的数据,可能为了规避汇编的一些缺点。定义一些数据往寄存器中读写,这就是非常大的进步,也可能是汇编和b语言过度有其它的语言,至少这个理念是质的变化,它将人从重复的机器port中解放出来
b语言发展了几年。他的问题可能也慢慢的显示出来。毕竟它仅仅是解决汇编的一些问题,在1971年左右。一群美国的试验人员改进b语言,或者仅仅是利用b语言的变量或者常量的理念。将b语言更加的规范,或者说是直接开发出还有一种b语言,只是他们取名为c语言,由于他们觉的这个更加抽象。更加规范
单板机或者说硬件方面更加的完好,控制芯片的逻辑性更加的强。c语言的抽象性或者说可读性一出来就立即得到广泛的应用
这里得说一下这个c语言或者b语言和汇编的主要差别:当然这也是个人的理解,对于这两门语言我也是略懂。也欢迎专家的指正
汇编主要是定义各个寄存器之间的跳转,以及依据各个寄存器的功能,进行简单的运算,它是基于计算机的硬件方面来接受和操控寄存器中的内容的,所以说那个时候的程序猿。须要理解各个寄存器之间的跳转和运算,基于硬件的限制相对照较高
可是c语言也许改变了这一点,它的设计理念就是脱离硬件而设计的。它自身定义了一些特殊的数据类型,比方整形,4个字节,来规定二级制的一些列的数据,这个通过编译器内核的编写来实现,它定义了bool型的数据类型,来表示与非门,关于小数,它又一次的制定了小数的存储标准。定义了双精度和单精度,而且为这个数据类型留下了8个字节的内存空间。它还规定了内存对齐的规则。总之。这些都是一个编译器须要定义的东西,可能在这个编程语言的标准库中,然后对于编译生成的文件,编译器还必须有连接器,将生成的二级制文件和机器的硬件连接,这个连接的标准,各个开发语言上都有明白的规范,所以说c或者b语言,将编译环境和硬件分离,而且制定一系列的数据类型,而且通过一些操作符,将这些数据类型写入硬件,这也许就是我们说的堆栈方面的知识了,通过编译器编译成二进制文件,然后通过连接器连接
所以说c语言的出现,或者说c语言的开发理念的出现,能够说是编程的一大进步。
以上全部的时间都是1979年前的事情了
经过几年的发展,机器的硬件有了非常大的发展,并且硬件方面也许已经出现了多级分化
截止上世纪80年代,那时候的计算机环境大致例如以下:中国刚开放大学 。那是时候苹果和微软还没有出现。比尔盖茨那时候也许正在开发dos系统,ibm仍是it的老大。乔布斯可能还在上学。硬件已经发展到多元化的级别。相同的一个美国的大学生正在准备自己的毕业论文。他也许认为c语言用的不爽。也不清楚怎么的,面向对象的思维出如今这个大学生脑袋里面。他開始改进c语言。在c语言的基础上添加了类,继承,派生等特性。将c语言由先前的面向过程直接面向对象,这样的面向对象的思维,绝对不是简简单单的说添加特性那么简单,就是一个思维的全然改变,个人感觉c语言是将世界织成一张网。可是c++全然将世界分成了块
又经过了非常多年的发展,美国成立了c++标准委员会,专门制定c++的标准。标准在98年成了一个标准,后面有03版本号了11版本号。这里不提了
硬件方面发展迅速。開始了多元化,有先前的简单控制芯片。发展成了如今电脑的cpu I7,E5,简单的外围电路。也有多样化,本来的控制按键发展出了电脑键盘。eeprom可能升级成了如今的机械和ssd,笨拙的1602可能是如今诸多显示器的一个过程。有了8个G,16个G的暂时数据存储设备,当然也有发展到别处的,比方三菱公司的plc板,走的就是工控线路,手机的控制芯片则是不同的分支
90年代中期。出现了非常多别的语言。针对c/C++的繁琐和一些操作的复杂,出现了非常多编程语言。更加方便的实现客户开发
c++方面出现了vc6.0。dev-c++。gcc等多种编程环境
2:c++包括哪些东西
这个是我写这篇文字的核心。究竟是什么呢,须要了解c++的哪些东西才算是掌握c++呢
前面大致的了解了c++的理念,主要是通过一些数据类型来控制硬件相关的。所以,大致的将c++包括的哪些东西归纳一下
1、一连串的理解
c++定义了四种主要的数据类型int、float、char、bool 在这基础了拓展了非常多的数据类型,通过新定义或者加修饰符等方法。这里不提 。这些数据类型都是通过入栈进入内存,在内存中存储的,为了方便管理这些数据,c++又定义了指针,也就是这些数据的内存的编号,为了方便找到他们。为了方便他们的转换或者说是訪问,规定了两个符号,一个是星号”*“,一个是取地址符"&",为了更好的管理资源,对于一些数据类型同样的数据类型。c++引进了数组的概念,相应的也有了数组的指针
有了上面的数据类型。也就须要对他们的关系做个推断或者对他们进行运算,c++引进了运算符和一些操作符。
一些成型的算法,c++引进了函数,以及函数的參数和返回值,等一系列的传參返回的操作,为c++的灵活性提供了很多其它的方便
对于一些特定的数据类型。为了方便更好的管理,c++加入了枚举,结构体。类等一些复杂的数据类型,当然,这些类型也有地址。也有指针方面的运算等等,这些聚在一起的数据也得有些特性吧,于是c++针对这些复合类型的数据,定义了了公开,保护,和私有的权限,关于各个复合结构之间的关系,有公共关系,友元关系等等
这些复合的结构体为了方便一些特性的传输或者说是特性之间的传输,c++引进了继承和派生,函数方面引进了重载等多个特性
可是这些依然对一些类别进行了限制,还不能更抽象的表现编程的思维。c++引进了虚函数和纯虚函数,对类的多态性做了强大的补充,使类更加的抽象和灵活
类以及函数之间为了更加的脱离一些数据类型的困扰,也为了更加的抽象,c++引进了模板
上面的工作是足够的灵活了,c++为了更加精简代码的量,也为了更加方便代码的可读性,定义了预编译头和一些宏定义
为了更加方便一些操作,c++规定了c++标准库,对算法,容器。IO。调试,c兼容方面做了全方面的补充
以上就是c++语言里面全部的内容,在列表分下类
1:数据操作类:简单数据。数组,指针,运算符。操作符,函数
2:复合数据:结构体和类,权限,继承和派生,多态,重载
3:标准方面:c++标准库,预编译和宏定义,调试
,
我眼中的c++编程总结-20150602的更多相关文章
- Python黑帽编程2.9 面向对象编程
Python黑帽编程2.9 面向对象编程 我个人认为,计算机语言的发展,有两个方向,一个是从低到高的发展过程,在这个过程中,语言的思考和解决问题的方式是面向硬件的.硬件本质上处理的是信号,在此基础上, ...
- [WCF编程]7.实例上下文模式
一.实例上下文模式概述 实例上下文(IntanceContext Mode)表示服务端的服务实例与客户端的服务代理的绑定方式. 在实例化服务器对象时,WCF采用了3种不同的模式:单调(Per-Call ...
- 【小白的CFD之旅】17 需要编程?
小白经过大半个多月对于CFD的学习,终于对其大概轮廓有了初步的了解,尤其是在与小牛师兄交流之后.小牛师兄毕竟是专业学流体力学的,小白认为在流体力学理论方面自己与牛师兄至少存在5年的差距.不过小白并不气 ...
- 转《UNIX编程艺术》读书心得
花了一段时间看完了<UNIX编程艺术>,但不是看得特别仔细,尤其是后面作者通过对工具的讲解来阐述其设计思想,因为很多工具能未曾接触过,难免就会产生一些乏味的感觉.其实就像译者姜宏在译序里说 ...
- 用VC进行COM编程所必须掌握的理论知识
一.为什么要用COM 软件工程发展到今天,从一开始的结构化编程,到面向对象编程,再到现在的COM编程,目标只有一个,就是希望软件能象积方块一样是累起来的,是组装起来的,而不是一点点编出来的.结构化编程 ...
- 转载:开发者眼中最好的 22 款 GUI 测试工具
对于很多同学来说gui程序的测试是一个难点,所以我从网上转载了一篇关于gui测试的一篇文章,里面罗列的很多工具,大家可以尝试一下学习学习. 英文原文:22 best GUI testing tools ...
- python面向对象编程(下)
本篇详细介绍了Python 中类的成员.成员修饰符.类的特殊成员以及两个综合运用实例. 环境为:python3.5.1 类的成员 类的成员包括三大类:字段.方法和property属性 注:关于这三类成 ...
- OpenGL基础图形编程
一.OpenGL与3D图形世界1.1.OpenGL使人们进入三维图形世界 我们生活在一个充满三维物体的三维世界中,为了使计算机能精确地再现这些物体,我们必须能在三维空间描绘这些物体.我们又生活在一个充 ...
- JavaScript DOM编程艺术学习笔记(一)
嗯,经过了一周的时间,今天终于将<JavaScript DOM编程艺术(第2版)>这本书看完了,感觉受益匪浅,我和作者及出版社等等都不认识,无意为他们做广告,不过本书确实值得一看,也值得推 ...
随机推荐
- php如何读写excel
php如何读写excel 一.总结 一句话总结:PHP操作Excel最好的方法是使用PHPExcel类, 可以到官网下载PHPExcel类库 http://phpexcel.codeplex.com ...
- 65.十一级指针实现百万qq号的增删查改以及排序写入
运行结果: 内存使用情况: 写入文件排序好的数据: 创建文件地址以及创建十一级指针 char *path = "QQ.txt"; char *sortpath = "QQ ...
- APK文件浅析-Android
2011~2015,5年时间,断断续续学习了Android. 最近打算在2011年2个月认真学习的基础上,深入学习下. 由于有之前的Android基础,加上N年的Java等变成经验,自我感觉And ...
- 使用JOTM实现分布式事务管理(多数据源)
使用spring和hibernate可以很方便的实现一个数据源的事务管理,但是如果需要同时对多个数据源进行事务控制,并且不想使用重量级容器提供的机制的话,可以使用JOTM达到目的. JOTM的配置十分 ...
- mysql新加入用户与删除用户详细操作命令
方法1 :使用mysql root(root权限)用户登陆直接赋权也能够创建用户 /usr/bin/mysqladmin -u root password 123456 mysql -uroot -p ...
- Excel查询序列所相应的值-vLoopup函数,求比例分子改变但分母不变
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWV3ZWlvdXlhbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...
- SICP 习题 (2.10)解题总结: 区间除法中除于零的问题
SICP 习题 2.10 要求我们处理区间除法运算中除于零的问题. 题中讲到一个专业程序猿Ben Bitdiddle看了Alyssa的工作后提出了除于零的问题,大家留意一下这个叫Ben的人,后面会不断 ...
- LocationOnScreen-控件在手机屏幕中的位置坐标
我们可以通过如下的方法获得某个控件在屏幕中的绝对坐标 代码如下: private int[] mHistoryDisplayButtonLocation; private int mHistoryDi ...
- Python 极简教程(十一)字典 dict
字典是以大括号标识,以键值对(key:value)的形式,无序,不可重复,可变的集合类型. 字典具有非常高效的读写效率. >>> d = {} # 创建一个空字典 >>& ...
- Java 泛型-泛型类、泛型方法、泛型接口、通配符、上下限
泛型: 一种程序设计语言的新特性,于Java而言,在JDK 1.5开始引入.泛型就是在设计程序的时候定义一些可变部分,在具体使用的时候再给可变部分指定具体的类型.使用泛型比使用Object变量再进行强 ...