zoukankan      html  css  js  c++  java
  • 我眼中的c++编程总结-20150602

    断断续续的学习了非常多东西,有51、Avr、ARM、PLC、CC++、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++标准库,预编译和宏定义,调试

    ,

           

       

           







           

         

  • 相关阅读:
    使用AudioRecord录音
    使用MediaRecorder录音
    程序员不应迷失方向
    鼠标移入下划线展开 CSS3伪类
    横向滚动条,鼠标按下左右滚动!
    js遍历数组的几种方法
    前端随心记---------nodejs工具nvm.nrm.nodemen
    前端随心记-----------面试题分享
    鹅厂前端面试小题
    前端随心记-------浅谈Axios
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/5092502.html
Copyright © 2011-2022 走看看