C十十实用培斜最营 去编译,在需要的地方本书将予以说明。 如果接收到错误信息,特别是“Error:'ztc'not found”信息,一定要确保,文件在当 前目录下(ZTC1是Zortech的C编译器,它不包含在配套磁盘中,读者也不需要.然 而,ZT℃在某些时候试着去运行C编译器,从而导致错误信息。读者只要修正自己 的输入并再试一次就可以了)。 在编译完WELCOME程序之后,读者可能想去尝试编译更为高级的程序实例。按照以 下步骤编译并运行第五章中的程序: ·健人cdVepp\source\c05以改变至第五章的目录。 ·在DOS下,健人z运行ZZ.BAT文件,此批文件包含所有编译和连接程序所需的 指令。 DOS提示符出现后,健人elevsim运行该程序。健<Esc>退出。 读者可以在C:LCPP\SOURCE\CO4下编译和运行POPUP.CPP程序。使用ztc.p pup命令编译该程序,然后运行并健人风次<Spacebar>清除弹出式窗口。读者也可以在 C:LCPP\LIB下运行ZZ.BAT去编译WINTOOL程序.当读者学习了第六章之后,即可以 使用WINTOOL设计自己的弹出式窗口了,运行WINTOOL之后,按<Ec>健返回DOS。 注:读者阅读各章时,使用CD伞令去改变C:LCPP\SOURCE\COm中的n,n表示每 一章的章号。第六、七章的程序清单存储在C:\LCPP\LP下。在C:L.CPP叭 ANSWERS中可找到附加的稚序清单。使用VDE、编拜器或READ去浏览月录中 的程序清单。读者可使入rad并选一个程序进行测览。选择一个目录名可改变那 个目录。可按照本书给出的指令在屏菲上测试程序源码
第一章C十十概述 这一章将帮助读者了解什么是C十+,使用C十十有何方便之处。如果读者熟悉Pascal 或C就更好了,可以快捷地阅读本章以了解C++与那些流行的语言有何不同,我们假设读 者具备一些基础知识,如位(bit)和字节(byte)的含义、DOS命令、运行程序的步骤等。 我们将从C++程序的各类成分开始,它们是本书所有程序共享的。我们将简单地概括 一下基本概念:常量,变量、输人和输出以及操作符等。几乎所有C+十程序都使用以上一个 或多个概念,所以有必要花时间去阅读并运行一些程序实例。 1.1C++结构 所有C十十程序都是相关的,也即它们的组织结构共享某些相同的“构件”,最好的学习 方法是剖析一个像WELCOME.CPP(清单1.1)那样的子程序,以了解这些“构件”是怎样联 系在一起的,把这个文件装到硬盘上或键入到编辑器中,然后,在DOS提示符下使用编辑器 中的相应指令键人ztc welcome以创建WELCOM,EXE.通过键人该程序的名字来运行它, 或使用习惯的手段运行该程序 注:从现在开始,躺译和运行程序实例均使用相同的方法,但要替代像WELCOME CPP等相应的文件名。除非程序要求特定的编译指令,在以后的讨论中不再重夏编 译和运行程序的步赚。 程序清单1.1 WELCOME.CPP 1:#include <stream.hpp> 2. 3:main() 4: 5: cout <<"Welcome to C++programming!n". 6:} 3一6行是这个小程序的主体,抽掉第5行: mein() 被称为函数一C+十最重要的一个特性。在程序清单1.1中,只有一个函数名main。在其 他C+十程序中,可能有几十、上百个以同样形式编写的具有不同名称的函数。不管一个程 序有多少函数,它必须仅有一个称为main的函数。运行C+十程序时,总是从main开始。 注:不要把函数与数学函数相混清。C十十中的函数是一组指令,这组指令完成一系列 的动作。一个函数的作用完全由编程者描述
8 C十十实用话州教在 函数名后的圆括号告诉编译器,该函数没有从外部接收到信息。下面,读者将学习如何 在圆括号中列出参数,这些参数要求函数处理所含的信息.例如,读者可能通过main的命今 行选项让程序使用一个字母或一个文件名。 函数名和圆括号以及左、右大括号中的内容称为函数体。返回到程序清单1.1,可以看 到main的函数体只包括一行: cout<Welcome to C++programming!n 因为,这对大括号,编译器知道所括起的程序行(称为语句)属于函数main。通常,一条 语句表示程序运行时完成的一个动作。其他语句可以是说明、定义、表达式或指令,它们在编 译器编译时被执行。特别地,说明语句提供编译器某些诸如新数据类型枚式的信息。定义语 句是在存储器中为存储的值创建一个空间,可能是一个预先说明的数据类型的变量,表达式 (像1十m)求值后得到一个值,其他指令可能会更改编译器的工作方式.根据不同的条件,它 们可能选择不同的程序段来编译。不必担心记不住这些术语。作者和有经验的程序员通常 混合使用“说明”和“定义”这两个词,读者不必拘泥这些描述。现在,最重要的是理解C十十 中大括号的作用,即将一或多条语句、表达式、说明或定义组合到一个单元中。总之,大括号 和其中的程序称为块。 1.1.1流 当运行实例程序时,可以得到信息“Welcome to C十+programming!”.有两种方法输出 此信息,但最常用的是输出流。我们可以看看实例程序中的输出流语句: cout<<Welcome to C++programming! 输出流中最先出现的是cout,它是”character output""的缩写(顺便提一句,该单词通常 读作"see out",而不是"kout“)。对象count是输出的目的地,即我们希望将程序要显示或打 印的信息以字符形式发送到此地方。<<流输出符,它是一个符号但却是两个符号构成的。 这个符号指向cu,表示后边的内容流向符号左边的目标对象。在程序清单1.1中程序流的 瓶就是串: Welcome to C++programming \n" 双引号表示让编译器逐字取括起来的字符,即不是把括号括起来的字符作为程序语句 或指令进行处理。n符号称为换行字符。在串中(并不一定代表末尾)插人导致程序在终 端或打印机上开始一个新行。 学习输出流的好方法是自己使用一下。把程序清单1.1装入编辑器,然后在mai体中 }之间加以下几行: out programming!V 注意,这三行产生与原来的程序-一样的结果,因为前二行没有在末尾加,程序以一行 显示它们。试着在每一行末尾加,看看会产生什么结果?
第一章C十十版莲 另一种产生类似结果的方法是使用带有多个成分的一条输出流语句,可以写 mem, 请观察在同一程序实例中运行以上两个例子的结果,在第一个例子中,有三条语句末尾 带有分号一一C+十的语句结束符。C+十程序中所有语句都必须用分号结束。第二个例子 中,有三个串,但只有一条被分成二行的语句。C+十忽略文本中的行结尾且不管以一行还 是多行写语句。 通誉,可以以下列形式写输出流语句: COut <<<<b<<.<<CI 其中a,b,c流向输出流对象cout。如果必要,可以串接许多项,可用一行或几行健人它们: cout <<a <<6 <K0I 在以上各种情况中,都以一个分号结束一条语句,而不是一行。也可以把长串分成几行 键人,例如,在程序清单1.1中插人: coat<<"The ed Bright.\ And returned home the previous night.n" 这只是一个输出流语句和一个申。每行末尾以反斜线告诉编译器把带有反斜线的文本 行的先前字符联起来。在反斜线后编译器不留出空间。运行该程序时,会看到五行以一行或 二行连起来显示,如表示换行符,即一行结束。还要说明的是,在这个输出流语句中,仅有两 个双引号,一个在开头,另一个在结尾。字符串的长度也没有任何限制。 注:字串长度无限制是指编评器字符串长度无限制,当然用户也不能在20MB的硬盘 上输出一个100MB的字特串, 我们在后面还将涉及流、字符串和字符,那时读者可以根据程序清单1.1(WELCOM. CPP)来显示各类字符串,并在字符串中插人换行符,以进一步了解n的作用。 1.1.2分号的说明 在学习C十+时,一个较为困难的问题是如何使用分号。在程序清单1.1中,只有第5 行结束时有一个分号,而其他行都没有。原因很简单,第5行是一条语句,而语句必须以分号 结束。如前所述,分号是指一条语句的结束,也就是说通知C十十编译器一条语句在分号处 结束。因而读者可将一条语句写在很多行里,如, cout<<This is one statement <<on three lines'\n
10 C十十实用情制表灌 因为仅有一个分号,C十十编译器认为它和以下语句是一样的 out<This is one statement.n" 读者不必刻意去记住大量的关于分号的规则,开始时也可能该加分号的地方没加,而不 该加的又加了。学习加分号的技巧是了解C十+中的元素,以举提哪些元素是需要加分号 的。另一方面,加分号实际上是很自然和明显的。 注:用错了分号后,编译器会显示出错信息和错误原因。即使有经验的程序员也会有一 两次误用分号,因而,若刚开始编程出现很多错误时,不必为此沮丧。 1.1,3注释说明 程序中的注释是为了让其他程序员和编程者自己能更方便地阅读程序。若需要在程序 中插入一段注释,要在开始和结束时加上双字符/和/。下面给出几个注释的实例: /*Originel author skipped town/ 这类注释还可以扩展成多行注释,例如: /welcom ·Date:l/1/199 by Tom Swan *Revision :1.0 这里需要说明的是,第二和第三行的*号不起任何作用。编译器工作时,只根据第一行 开始的/和第四行结束时的¥/将这四行作为一条注释处理。 同样,读者也可以将注释插在某一条程序语句中,但这样做容易出错。例如在程序清单 1.1中插人以下注释: cout <<"No comment"/Oh,yeah?*/<<"here!n"; 因为编译器会滤掉注释/*Oh,yeah?*/,这条语句运行时只显示No Comment here! 用/ 和*/括起来的注释称之为C风格的注释,在C和C++中都可以用。除此之外, C+十还提供另一类注释(C中不能用),它们只能以双斜线开始,例如: /Wellcome.epp by Tom Swan C+十的这类注释只有起始字符∥,因而它只能放在一行程序结束的位置,而且也不能 将一条注释写成多行。例如: cout <<"Your name?" /Prompt for user's name 该语句显示"Your name??",语句后的注释用于说明该语句, C+十和C注释能够嵌套使用,这在调试程序时很有用处。我们可以把一条程序语句用 C或C++暂时注释起来,使之不产生任何动作。例如