zoukankan      html  css  js  c++  java
  • 第二章 c++的框架

    目录

    第二章 c++的框架

    2.典型的c++程序

    1.c++的文件组织结构

    3.程序 = 数据结构 + 算法

     

    1.c++的文件组织结构

    不知道各位知道什么叫文本文件没?或者知道什么叫文件不?不是我侮辱各位的智慧,很多人会很多电脑操作,但是对文件的概念还是没有的。然后是另一个概念“文件夹”,还有“路径”。各位需要了解这些基础。去网上搜索一下,“百度知道”,“百度百科”那些地方应该有详细的说明,我这里就不多说了。

    c++源文件是一个文本文件,所以可以用“记事本”(电脑自带的一个字处理软件)打开来编辑。源文件是“文件名.cpp”的形式。c++程序不是只能有一个源文件,而是可以有1个到多个源文件组成。然后这些源文件通过“编译器”程序转换输出为一一对应的目标文件,是“文件名.obj”的形式。这样是否就能运行了呢?还是不行,常用的软件都是有一个入口程序,你双击一下就执行,而c++目标文件可能有多个,用户根本不知道点击哪一个。事实上,还有一个叫做“链接器”的软件把所有的obj目标文件组合起来,形成一个单独的程序,一般是“文件名.exe”形式。在系统中,往往会隐藏了某些文件的扩展名,比如后面的.exe你看不到,但是实质上是存在的。

    c++典型的文件组织结构:

    1…n.cpp  –>  1...n.cpp –> 1.exe

    1个到n个cpp文件编译成1个到n个对应的obj文件,然后链接成一个exe文件。

    为什么需要多个cpp文件,而不是用一个文件就够了呢?多个文件的目的是为了让你把逻辑相关的内容放在一个文件,逻辑上关联性小的,没有关联的放在另一个文件,这样就起到分类管理的目的。程序复杂了,源代码文件就会变得很大,阅读和修改就比较低效率,如果能够很好的分类,一个源文件保持比较小的尺寸,就能提高你阅读和修改的效率。从程序角度,你多个文件和一个文件的布局,对程序本身没有影响,因为最终都是组合成一个exe可执行文件。

    2.典型的c++程序

    典型的c++源文件的内容是怎样的呢?c++语法两个特点:一、位置很重要;二、顺序很重要。有很多逻辑概念都是基于代码所在位置和顺序,这个在以后的介绍中请细心留意。

    c++逻辑上有多个范围空间,被称为“作用域”,一个语法要素的作用范围(或称有效范围,可见范围等),和他所在的作用域是有关的。这个作用域的实质性,现在可能还无法把握,顺着学习的深入就会慢慢体会到。

     

    作用域

    最外层的作用域是程序作用域,里面包含文件作用域,然后函数作用域,最后是块作用域。

    程序作用域内的元素,是一个程序中所有源文件都能自由使用的,是整个程序范围共享。

    文件作用域内的元素就当前的cpp文件独享。其他源文件访问不了。

    而函数作用域内的元素,只有这个函数独享。程序作用域用不了,文件作用域访问不了,其他函数作用域也用不了。相当于一个对外封闭的黑箱。

    而块作用域的使用范围就更小啦。

    为什么要有这种“黑箱”机制,而不是所有东西都是相互可见,可以随意利用的,可以随意共享的?那是因为“封闭”是一个很有效的减少程序错误的手段,在程序实践中能体会到好处。

    2.1程序作用域和文件作用域

    我说过c++中位置很重要,那么源文件中处于怎样的位置是程序作用域,而怎样的位置是处于文件作用域?例如源文件a.cpp:

    元素a;

    元素b;

    元素c;

    类似的格式,abc哪一个是处于程序作用域,是所有cpp文件可以共享的,哪一个只是a.cpp文件独享的?这里面单看位置是无法区分出来的,这里面就需要一个标志:extern或者static。例如:

    extern 元素a;

    static 元素b;

    extern 元素c;

    extern表示处于程序作用域。而static表示处于文件作用域。不过,c++语法有个不足之处,如果希望a.cpp中的extern 元素a被b.cpp中使用,还需要在b.cpp中书写一次:

    extern 元素a;

    2.2头文件

    这是挺繁琐的。因为任何用到这个元素的源文件都要重复写一次。如果要在10个源文件中共享10个元素,那么就要写一百次,有没有一种建议的方法?有!那就是“头文件”,头文件一般是“文件名.h”的形式,头文件和一般的源文件从内容上来说没有本质的分别,只有一个:头文件的内容只是用来插入到源文件中,所以他不会有对应的obj目标文件。只要把各个需要共享的元素都写在一个头文件,然后让他插入到每一个源文件里面,就不需要书写重复的内容了。这就是头文件的作用。那么该如何指示头文件插入到源文件的哪一个位置呢?只需要一条命令:

    #include “某.h”

    这条指令相当于把“某.h“头文件的所有内容替换到这里。假如有百个元素需要共享,又有一百个源文件需要用到这一百个共享元素,那么只需要写一百个元素+一百个插入指令,而不需要写一万个元素,这里面的效率提升得惊人!

    然后回到作用域的话题。

    2.3 函数作用域

    函数作用域是由函数元素所开启的。形式如下:

    extern …函数X(…){

    花括号内部就是函数作用域

    元素a;

    }

    函数元素我们后面才介绍,这里只需要认准函数元素一般是带中括号和花括号(也就是大括号)的。在花括号内部就是函数作用域。函数元素自身是处于程序作用域或文件作用域的,所以外部可以直接使用函数,但他内部包含了一个函数作用域,是外部无法直接访问的。例如:函数X是程序作用域的,元素a是函数作用域的,是函数X独享的元素。

    2.4 块作用域

    块作用域是花括号包含的。形式如:

    {

    这是块作用域

    元素a;

    }

    块作用域也是同样的规则,只是当前块独享。

    2.5 典型的源程序

    a.h 头文件:

    extern 元素a;

    a.cpp 源文件:

    #include “a.h”

    static 元素b;

    extern …某函数X(…){

             元素c;

             …{

                元素d;

                 }

    }

     

    static ...某函数Y(…){    }

    ……

    b.cpp 源文件:

    #include “a.h”

    ……

    然后经过以下过程:

    a.cpp,b.cpp –> a.obj,b.obj –> test.exe

    一个软件就出来了,就这么简单!

    2.6 学这一节有什么用?

    一个是为了让各位有个直观印象,源文件和目标文件,文件内容的结构什么的,怎样生成一个可以运行的程序,这些都是可以看得见的。第二个是,有一个交流的基础,不要我说这个元素只能放在函数作用域,你却不知道位置在哪里,乱放一通,然后就出现语法错误,生成不了可执行程序。位置和顺序都是最关键的,大家一定要留神。

    3.程序 = 数据结构 + 算法

    数据结构 + 算法 =程序,这是一个伟大的公式。因为这条伟大的公式,我将减少很多无谓的劳动,直接告诉各位最关键的两个要素如何定义便可。

  • 相关阅读:
    【雕爷学编程】MicroPython动手做(01)——春节后入手了K210开发板
    【雕爷学编程】零基础Python(01)---“投机取巧”的三条途径
    【雕爷学编程】Arduino动手做(64)---RGB全彩LED模块
    Microsoft Development Platform Technologies
    JS 的Date对象
    SQL数据库连接池与C#关键字return
    RDLC报表 报表数据 栏 快捷键
    C# 操作World生成报告
    SAP-ABAP系列 第二篇SAP ABAP开发基础
    SAP-ABAP系列 第一篇SAP简介
  • 原文地址:https://www.cnblogs.com/Nobel/p/2084363.html
Copyright © 2011-2022 走看看