⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 第14章 程序的文件结构.htm

📁 用非常通俗的语言介绍了C++和C
💻 HTM
📖 第 1 页 / 共 4 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0049)http://www.d2school.com/bcyl/bhcpp/newls/ls14.htm --><HTML><HEAD><TITLE>教学--第十四章 程序的文件结构</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<STYLE type=text/css>P {
	MARGIN: 1px 2px; LINE-HEIGHT: 150%
}
.节标题 {
	FONT-WEIGHT: bold; FONT-SIZE: 12pt
}
TD {
	FONT-SIZE: 9pt
}
.tdtitle {
	FONT-SIZE: 20pt
}
.celltopline {
	BORDER-TOP: #000000 1px solid
}
.menucell {
	FONT-SIZE: 10pt
}
#glowtext {
	FONT-SIZE: 10pt; FILTER: glow(color=red,strength=1); WIDTH: 100%
}
A:link {
	FONT: 10pt 宋体; COLOR: blue; TEXT-DECORATION: none
}
A:visited {
	FONT: 10pt 宋体; COLOR: purple; TEXT-DECORATION: none
}
A:active {
	FONT: 10pt 宋体; COLOR: red; TEXT-DECORATION: underline
}
A:hover {
	COLOR: blue; TEXT-DECORATION: underline
}
</STYLE>

<META content="MSHTML 6.00.2900.2769" name=GENERATOR></HEAD>
<BODY leftMargin=0 topMargin=3>
<CENTER>
<TABLE height=154 cellSpacing=4 cellPadding=4 width=760 border=0>
  <TBODY>
  <TR>
    <TD 
    style="FONT-SIZE: 10pt; TEXT-INDENT: 20px; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体" 
    width="100%" height=148>
      <H2>第十四章 程序的文件结构</H2>
      <P><A href="http://www.d2school.com/bcyl/bhcpp/newls/ls14.htm#14.1">14.1 
      源文件和头文件</A></P>
      <P><A href="http://www.d2school.com/bcyl/bhcpp/newls/ls14.htm#14.2">14.2 
      如何创建多个单元文件</A></P>
      <P><A href="http://www.d2school.com/bcyl/bhcpp/newls/ls14.htm#14.3">14.3 
      如何写头文件</A></P>
      <P>&nbsp;&nbsp; <A 
      href="http://www.d2school.com/bcyl/bhcpp/newls/ls14.htm#14.3.1">14.3.1 
      在头文件内加入函数声明</A></P>
      <P>&nbsp;&nbsp; <A 
      href="http://www.d2school.com/bcyl/bhcpp/newls/ls14.htm#14.3.2">14.3.2 
      最常见的预编译语句</A></P>
      <P><A href="http://www.d2school.com/bcyl/bhcpp/newls/ls14.htm#14.4">14.4 
      如何使用头文件</A></P>
      <P><A href="http://www.d2school.com/bcyl/bhcpp/newls/ls14.htm#14.5">14.5 
      变量在多个源文件之间的使用</A></P>
      <P>&nbsp;&nbsp; <A 
      href="http://www.d2school.com/bcyl/bhcpp/newls/ls14.htm#14.5.1">14.5.1 
      变量声明</A></P>
      <P>&nbsp;&nbsp; <A 
      href="http://www.d2school.com/bcyl/bhcpp/newls/ls14.htm#14.5.2">14.5.2 
      多个文件中共享变量的实例</A></P>
      <P><A href="http://www.d2school.com/bcyl/bhcpp/newls/ls14.htm#14.6">14.6 
      附:如何单独生成一个头文件</A></P>
      <P> </P>
      <P>程序是由什么组成的? 学习到今天,我们至少有两个答案: 
      <P>第1,程序由代码语句组成。正是一行行的代码,组成了一个完整的程序。 
      <P>第2,程序由函数组成。一个个函数之间的互相调用,最终构建出一个完整的程序。</P>
      <P>今天我们又有一个新的回答:“程序由文件组成”。</P>
      <P>程序为什么需要使用多个文件?</P>
      <P>一个小的程序,可以只写一个源文件,但程序稍微一大,就需要将其中不同的逻辑实现放到不同的源文件.对于需要多人一起开发的软件,自然更需要多个源文件。</P>
      <P> </P>
      <H3><A name=14.1>14.1</A> 源文件和头文件</H3>
      <P> </P>
      <P>和别的一些语言不同,C,C++的代码文件有“头文件”和“代码文件”之分。二者合起来我们称为单元<SPAN 
      lang=en-us>(Unit)</SPAN>文件。</P>
      <P> </P>
      <P>扩展名为 .c 或 .cpp 的文件,主要用以实现程序的各种功能,我们称为代码文件。</P>
      <P>扩展名为 .h 
      的文件,称为头文件。在头文件里主要写一些函数、数据(包括数据类型的定义)、等的声明,这样可以在多个.c或.cpp文件内<B>共享</B>这些函数、数据。第12章我们提过到头文件的功能。说它可以起到函数“名片夹”的作用。</P>
      <P> </P>
      <P>大都数时候,源文件和头文件是对应出现的,比如有一个<SPAN lang=en-us> A.cpp </SPAN>的源文件,就会有一个<SPAN 
      lang=en-us> A.h </SPAN>的头文件。这种情况在我们写应用程序时,更是常见。所以C++ 
      Builder对此进行了强化。比如,它支持在同名源文件和头文件之间通过热键来回切换。在CB6.0里,编辑器打开对应的源文件和头文件时,将显示为同一页下的两个子页。</P>
      <P> </P>
      <P>我们来实际动手看看源文件与头文件在CB里的对应关系。</P>
      <P> </P>
      <P>运行 C++ Builder 6或5。</P>
      <P>这一次我们需要一个空白的<SPAN 
      lang=en-us>Windows</SPAN>工程。很有可能,在你打开CB时,它就自动为你打开了一个工程。为了不出错,我们还是亲自建一个。CB6请使用主菜单:<SPAN 
      lang=en-us>File | New | Application</SPAN>;而CB5则使用:<SPAN lang=en-us>File | 
      New Application</SPAN> <B>新建一个<SPAN lang=en-us>Windows 
      </SPAN>空白工程</B>。<SPAN lang=en-us> </SPAN>如果在这过程中CB出现是否存盘的询问,请回答不存盘。</P>
      <P> </P>
      <P>找到“代码窗口”。如果你看到的是一个叫<SPAN lang=en-us>"Form1"</SPAN>的表单,请按<SPAN 
      lang=en-us>F12,</SPAN>“代码窗口”将跑到前面。它的标题应该是默认的<SPAN 
      lang=en-us>"Unit1.cpp"</SPAN>。正是当前代码文件的文件名。如下图:</P>
      <P> </P>
      <P><IMG src="第14章 程序的文件结构.files/ls14.h1.gif" border=0></P>
      <P> </P>
      <P>对于CB6,还可以看到在该窗口的底部有这样一个分页:</P>
      <P> </P>
      <P><IMG src="第14章 程序的文件结构.files/ls14.h2.gif" border=0></P>
      <P> </P>
      <P>源文件:<SPAN lang=en-us>Unit1.cpp </SPAN>和头文件:<SPAN lang=en-us>Unit1.h 
      </SPAN>并列着,我们可以方便地选择。至于<SPAN lang=en-us> 
      "Diagram"</SPAN>,称为“图解”。这是一个给这个源文件加配套注解,及表单上各控件的依赖关系的地方。如果是一个开发小组在进行共同开发,严格地要求每个成员为每个单元文件写上“<SPAN 
      lang=en-us>Diagram</SPAN>”,可以更好地实现程序员之间的沟通。</P>
      <P><SPAN lang=en-us>CB5</SPAN>没有这些,不过下面的热键操作两个版本均一样的,要求大家记住。</P>
      <P>按<SPAN lang=en-us> Ctrl + F6 
      </SPAN>可以在源文件和头文件之间来回切换。请大家试试。这个简单的操作将在我们今后的编程过程中高频率地使用。</P>
      <P> </P>
      <H3><A name=14.2>14.2</A> 如何创建多个单元文件</H3>
      <P> </P>
      <P>前面我们在“<SPAN 
      lang=en-us>Windows</SPAN>应用程序工程”中看到了头文件与源文件的匹配关系,在“控制台”的工程中,也同样存在。不过由于控制台经常只用来写一些小小的程序,所以往往只需一个源文件即可。由于只有一个源文件,所以也就不存在函数、数据在多个文件之间“共享”的需要,因此边头文件也就可以不提供。</P>
      <P> </P>
      <P>那么,是不是只有在程序很大,或者只有在有很多人同时开发一个软件时,才需要多个源文件呢?</P>
      <P><SPAN 
      lang=zh-cn>这就好像你家里只有两本书:《红楼梦》和《格林童话》,是把它们放在同一个抽屉里呢?还是分开放到两个抽屉里?我觉得后者是比较好的选择。因为我们常常希望家里看《格林童话》的人,最好不要去看《红楼梦》。</SPAN></P>
      <P><SPAN lang=zh-cn>程序也一样,最好把不同的逻辑实现,放到不同的源文件中。</SPAN></P>
      <P> </P>
      <P><SPAN 
lang=zh-cn>下面我们做一个实例。例子的代码我们都已经学过。目标是实现一个可以求统计值和平均值的程序。</SPAN></P>
      <P><SPAN lang=zh-cn>根据我们现在所学的情况,我把这个工程中的代码分为三个源代码:</SPAN></P>
      <P><SPAN lang=zh-cn>其一:主程序。就是</SPAN>main()<SPAN 
      lang=zh-cn>函数所在的代码。这个源文件实现总的流程。我将该文件取为</SPAN> main.cpp<SPAN 
      lang=zh-cn>。</SPAN></P>
      <P><SPAN 
      lang=zh-cn>其二:计算总和及计算平均值的代码。这个源文件负责用户计算过程,也包括每个过程所需输入输出。该文件将被存盘为</SPAN>mainfunc.cpp<SPAN 
      lang=zh-cn>。</SPAN> <SPAN lang=zh-cn>意为主要功能。</SPAN></P>
      <P><SPAN lang=zh-cn>其三:</SPAN> assifunc.cpp<SPAN 
      lang=zh-cn>。表示辅助功能函数所在代码。它只提供一个函数:将用户输入的大写或小写的字母</SPAN>'Y'<SPAN 
      lang=zh-cn>或</SPAN>'N' <SPAN lang=zh-cn>确保转换为大写。这个函数将</SPAN>main()<SPAN 
      lang=zh-cn>主函数内</SPAN>,<SPAN lang=zh-cn>判断用户是否继续时用到。</SPAN></P>
      <P> </P>
      <P><SPAN lang=zh-cn>新CB新建一个控制台程序(如果你还开着上个程序,先选</SPAN>File | Close All<SPAN 
      lang=zh-cn>关闭它)。CB会自动生成第一个文件,不过现在的名字为“</SPAN>Unit1.cpp"<SPAN 
      lang=zh-cn>。</SPAN></P>
      <P><SPAN lang=zh-cn>接下来是一项新工作,我们来添加两人新的单元文件,即上面说的“其二”和“其三”。</SPAN></P>
      <P><SPAN lang=zh-cn>CB6 :</SPAN>File | New | Unit<SPAN 
      lang=zh-cn>;CB5:</SPAN>File | New Unit<SPAN lang=zh-cn>。</SPAN></P>
      <P><SPAN lang=zh-cn>请进行两次以上操作,CB将为我们生成新的两个单元文件:</SPAN>Unit2.cpp<SPAN 
      lang=zh-cn>和</SPAN>Unit3.cpp<SPAN lang=zh-cn>。大家可以再试试</SPAN> Ctrl + 
      F6<SPAN lang=zh-cn>。</SPAN>(<SPAN 
      lang=zh-cn>注意,第一个单元文件:</SPAN>Unit1.cpp<SPAN lang=zh-cn> 
      没有配套的</SPAN>.h<SPAN lang=zh-cn>文件,所以不要在该文件里尝试</SPAN>Ctrl + F6)<SPAN 
      lang=zh-cn>。</SPAN></P>
      <P><SPAN lang=zh-cn>然后选择</SPAN>File | Save All<SPAN 
      lang=zh-cn>。全部存盘,最好不要存在</SPAN>CB<SPAN 
      lang=zh-cn>默认的目录下。记得按以下关系重命名:</SPAN></P>
      <P>Unit1.cpp <SPAN lang=zh-cn>存盘为</SPAN> main.cpp<SPAN 
      lang=zh-cn>;</SPAN></P>
      <P>Unit2.cpp <SPAN lang=zh-cn>存盘为 </SPAN>mainfunc.cpp<SPAN 
      lang=zh-cn>;</SPAN></P>
      <P>Unit3.cpp <SPAN lang=zh-cn>存盘为 </SPAN>assifunc.cpp<SPAN 
      lang=zh-cn>;</SPAN></P>
      <P><SPAN lang=zh-cn>至于总的工程,随你便,我图方便,还是叫</SPAN>:Project1.bpr<SPAN 
      lang=zh-cn>。</SPAN></P>
      <P> </P>
      <P><IMG src="第14章 程序的文件结构.files/ls14.h1.jpg" align=left border=0><SPAN 
      lang=zh-cn>(现在我们第一次在一个工程中用到多个源文件。所以你得学会如何快速打开一个工程中某个源文件——当然,现在这三个文件都已经打开着,不过假设你有点事关闭CB,我们不希望下回打开这个工程时,你“找”不到第2和第3个文件了——请点击CB工具栏上的这个图标:<IMG 
      src="第14章 程序的文件结构.files/ls14.h3.gif" border=0>,将出现源文件列表对话框,如左图)</SPAN></P>
      <P> </P>
      <P> </P>
      <P>接下来讲在这三个文件中,我们分别写些什么?大多数代码我们都已经在前面学过,所以我对代码的功能不作太多的解释。我们的重点是:三个源文件之间的代码如何实现“沟通”。</P>
      <P> </P>
      <P><B>第一个文件:main.cpp</B> 用来实现程序的主流程。</P>
      <P><SPAN lang=zh-cn>在 main.cpp 中的main()函数内,我们加入代码。</SPAN></P>
      <P> </P>
      <P>#include &lt;iostream.h&gt;</P>
      <P>... ...</P>
      <P>int main(int argc, char* argv[]) 
      <P>{ 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -