• C++术语俗解


    C++作为一种复杂的编程语言,其最晦涩的莫过于各个术语。

    以下就经常使用的术语,逐个俗解(特别声明:为了对术语的更好理解与记忆,仅代表个人的俗识,若有不妥之处望给予指正),分享共勉。

    内存:一片计算机执行程序时可以利用的物理空间。用心读这句:计算机所做的一切都是对现实世界的模拟。所谓物理空间,即就是现实世界常说的地理空间。在计算机的模拟世界中,把切切实实客客观观存在的称为物理空间,相对于逻辑空间而言。买手机时,其中有一项重要参数为运行内存,即就是手机操作系统执行程序时可以利用的物理空间大小,而执行程序怎么理解呢?比如你对着手机屏幕点了一下微信图标,微信界面就打开了,操作系统启动微信即执行程序。

    变量:对内存区域,从逻辑上划分成一块一块,起的名称。用心读这句:计算机所做的一切都是对现实世界的模拟。内存区域可以形象理解为整套房子购房合同书上的实测面积大小,而一块一块可以类比理解为一块公摊、一块客厅、一块餐厅、一块厨房、一块主卧、一块次卧、还有一块卫生间等等,所谓的公摊、客厅、餐厅、厨房、主卧、次卧、卫生间等等都是现实世界人们起的名称,而变量是对内存区域从逻辑上划分各个块后起的名称。或者还可以再类比理解,把内存区域想象成一张大大的中国地图(哦,对,就像一只鸡一样),北京、天津、上海、重庆、河北、山西、辽宁、吉林、黑龙江、江苏、浙江等等都是现实世界划分各个块后人们起的名称,而变量是计算机语言对内存区域,模拟现实世界从逻辑上,划分各个块后起的名称。

    类型:把内存区域划分为块的大小依据。假如,把中国比作一种类型,声明一个这种类型的对象,那么肯定在地球上划分为一个像鸡形状的块;同理,甘肃比作一种类型,声明一个这种类型的对象,那么肯定在地球上划分一个像哑铃形状的块;陕西比作一种类型,声明一个这种类型的对象,那么肯定在地球上划分为一个像钥匙形状的块;河南比作一种类型,声明一个这种类型的对象,那么肯定在地球上划分为一个像金鱼形状的块。类比理解编程语言中的类型,win32系统下,int类型占4个字节,double类型占8个字节等等,意味着不同类型可能划分块的大小有所不同。

    数组:有限个相同类型变量在物理空间连续存储的一种类型。去掉定语,即数组是一种类型。其实,稍微打开思路想象一下,假如同一种类型的变量有很多个(有限的,比如十个,一百个等等),那么为了方便简明表示应该如何表述?难道要int a1; int a2; int a3等等一直写代码到int aN; 吗?对,人类没有那么傻,的确不需要,可以简化为int a[N]; 一目了然,童嫂无欺,老少皆晓。即就表示有N个int类型的变量连续存储于内存中。尤其注意,数组是在内存中连续存储的有限个同等大小块的集合。用心读这句:计算机所做的一切都是对现实世界的模拟。早上上班坐地铁来的吧?地铁的每节车厢类比为一种类型,那么一趟地铁就有十来个同类型的车厢,而且是连续排在一起。

    结构:有限个不同类型变量在物理空间连续存储的一种类型。去掉定语,即结构也是一种类型。其实,再稍微打开思路想象一下,假如编程语言需要描述一个人的特征,有姓名、性别、身高、籍贯、家庭住址、身份证号码等等特性,现在拟定姓名为字符数组,性别为int类型,身高为double类型,籍贯为枚举类型,家庭住址为字符串类型、身份证号码为字符数组等等,那么,大家都知道咱中国最不缺人,需要描述这么多人,难道每个人都要把这些特征写一遍吗?那样,是不是程序员就不会失业了?那样,是不是大家都可以成为程序员了?那样,设计C++编程语言的人是不是脑子抽风了?对,人类没有那么傻,的确不需要,可以简化为person china[N]; 而person为人的类型即可。尤其注意,结构是在内存中连续存储的有限个不同等大小块的集合。

    联合:一种特殊的结构类型。特殊之处体现在什么地方?先想一个实际问题,假如定义了一个结构体,这个结构体有十个成员变量,但是呢,当真正实际使用时候,每次我们只使用结构体其中的一个变量,其他变量对我们都没有实质性的意义,此情境下一个结构体对象就很耗物理空间,怎么办?联合就应运而生了。联合就是成员变量有且仅有一个有效的类型。尤其注意,联合体的大小由其所有成员变量中类型占用内存最大的一个决定。到此为止,数组结构联合联系:结构是对数组的扩充,而联合却是对结构的收敛。

    枚举:一种创建符号常量的类型。生活中,赤、橙、黄、绿、青、蓝、紫可以理解为符号常量,枚举即是对有限个符号常量集合创建的一种类型。结合实际,通常一星期有七天可以定义为一种枚举类型,或者一年有十二个月也可以定义为一种枚举类型。枚举类型的变量只可以初始化为枚举符号常量。

    指针:对内存地址这种类型特意起的别称,即指针是一种类型。一个指针变量有双重类型属性,int型指针变量一则表示本身的值是个内存地址,二则表示此变量指向了一个int类型变量的起始地址。一个指针变量的值为一个内存地址,一个内存地址一般情况下为一个变量(或对象)在内存中存储的起始地址。指针变量的类型取决于指针指向变量的类型,指针指向变量的类型所占内存的大小决定了指针变量从起始地址丈量内存区域的步长大小。比如,win32系统环境下,short类型指针每次从起始地址丈量2个字节,int类型指针每次从起始地址丈量4个字节,double类型指针每次从起始地址丈量8个字节。相比于变量名,指针更微观,相当于从具体的物理空间角度探索对象的信息。只要定义一个对象,那么这个对象信息肯定是存储在内存中的某一块物理地址空间中,一般我们通过对象名称调用对象。指针即换了个角度,从对象信息存储的物理地址位置块直接调用对象。比如一个学生张三的学号为080605112,可以理解为八年级六班五排十一座二号,一般情况下,老师上课喊张三起来回答问题,也有另一种情况,老师可以直接通过学号定位到这个具体位置的同学(即张三)起来回答问题。

    函数:一种完成特定功能的工具。一个函数为了实现一种功能,一个函数是为了实现一种客观需求功能而设计的对应工具。用心读这句:计算机所做的一切都是对现实世界的模拟。通俗一点说,函数其实就是一种工具。程序其实也很简单的,别被某些老师(专门忽悠学生的人)把你吓着了。函数是一个功能体。那么,既然是一个功能体,就从现实中的某个例子开始分析一下:什么是功能体?比如:一台豆浆机,插上电它就可以运作,那么电资源就是它的运作条件,如同函数必须要放在main()函数内部调用是一样一样的。如果不插电,也就是说单个功能分析,可以想象一下,豆浆机它要制造豆浆,制造豆浆肯定要有原材料,对,那什么是它的原材料呢?好,你可能很清楚,需要豆子。对头,豆子是一类粮食,对吗?OK?Do you understand?函数的参数实质上就是这个功能体所需的资源。只不过模拟现实,各自有了虚拟意义上赋予的类型,现实中人们不在意这样的概念而已。好,再接着分析,豆浆机把豆子放进去,然后插上电源,再打开机子电源,磨豆浆,过几分钟(其实这就是进程的经典概念)后,关掉电源,打开豆浆机,倒出来的就是你梦寐以求的豆浆。这样子就好理解了,哦,那也就是说,函数的返回值就是所谓的这个功能体的功能实现的结果。

    参数:形参,即形式参数,声明对于函数功能体而言需要的资源类型及其名称;实参,即实际参数,对形式参数进行初始化的赋值。

    引用:某块已确定名称内存的别名。尽管是个别名,但引用可以“从一而终”,而不像某某竟然会“见异思迁”。既然都已确定了名称,为什么还要有个别名呢?主要用于函数参数和返回值类型。

    内联函数:以空间的代价换时间的优势。平常所谓的函数即常规函数,而为什么需要内联函数?比如正在读一本专业书(内容中有专业术语),突然提到一个很难理解的术语,想第一时间知道词意,肯定会上网查,在查这个词之前,需要先记住当前读到了多少页第几行,然后待把这个词意查清楚弄明白之后,又回过神开始接着之前记录的地方往下继续读。假设记录中断的页数和行数用了一分钟,由于对浏览器使用不娴熟,查询这个词花费了两分钟,理解揣摩词意用了一分钟,再回过神接着中断记录点开始继续读又耽搁了一分钟,那么整个一系列过程相当于使用了五分钟。其实,这个假设的全流程正是操作系统对常规函数的调用过程,除理解词意使用的一分钟外,其余使用的四分钟即处理函数调用机制的时间代价。试想为了弄明白一个词意,足足耽搁了四分钟时间,而真正理解词意只用了一分钟时间,有什么好的方式可以提到阅读的速度呢?好,最笨的方法(注意是最笨的方法,如果还没有想到这个方法,说明还不是最笨的人)就是把这个术语词直接替换为你查询到并理解揣摩的那一句或几句解释语即可。这样做的代价就是浪费了纸张,争取到了时间上的优势。同理,相较于常规函数,内联函数就这样应运而生了。

    :由于内置类型不够丰富,为满足需求设计的一种自定义类型。结合上面类型的解释理解类的概念,类是一种用户自定义的类型。类的设计主要分为两部分,成员属性和功能属性即成员变量和功能方法。类是高度抽象的一个概念,面向对象编程的核心在于如何设计类。现实中人们所谓的水果即是一个类型,假如老婆让你去买一斤水果,你知道买什么吗?水果是很抽象的一个概念,而具体是指香蕉?苹果?梨?等等,可以理解为水果这种类型的对象而已。

    临时变量:也称临时对象,C++编译器在需要时候临时生成的变量(对象)。轻轻的来,悄悄的去,源代码中根本看不到。那么,人们是怎么知道有临时变量存在呢?软件讲究逻辑,逻辑推理出来的。吹得这么神乎?哈哈,一般直观看不见摸不着的东西都很神奇。那么在什么时候需要呢?在两种情况下产生:对函数的形参进行初始化时的隐式类型转换和一个函数返回对象时。

    const引用参数:对于形参为const引用的C++函数,如果实参与形参类型不匹配,则其行为类似于按值传递。为确保原始数据不被修改,将使用临时变量来存储值。

    智能指针:有析构函数的类对象指针。对于一般的常规指针,到底在应用程序中该何时何地释放掉它所指向的内存成为了导致C++程序内存泄露的一个大难题。

    于是乎,程序员类比对象的人为构建后自析构的命理对指针进行了包装。如果一个指针是对象,则在对象过期时,它的析构函数会自动释放掉它所指向的内存,即所谓的智能指针。

    泛型编程:编写独立于数据类型的代码。

    模板:完成通用程序的工具。模板使得算法独立于存储的数据类型,而迭代器使得算法独立于使用的容器类型。

    容器:存储同种类型值的单元。

    算法:完成特定任务的处方。

    迭代器:遍历容器元素的对象,与遍历数组的指针类似,可理解为广义指针。

    Good  Good  Study,  Day  Day  Up.

    顺序  选择  循环  总结

  • 相关阅读:
    Oracle启动关闭
    Open_stack 有虚拟机端口不通的问题
    关于Oracle归档的一些操作
    电脑无法开机 接通电源后主板有红灯闪烁的问题
    Centos7+python3.6+face-recognition
    电脑无法开机的问题-主板上有红色告警灯闪烁
    关于systemctl
    Vsftp搭建 for centos7
    外星人入侵——安装Pygame
    mysql索引原理详解
  • 原文地址:https://www.cnblogs.com/Braveliu/p/6181689.html
Copyright © 2020-2023  润新知