C++从入门到精通(第2版)
上QQ阅读APP看书,第一时间看更新

第1 篇基础知识

万丈高楼平地起,打好基础不费力!

本篇是学习C++语言的基础。通过本篇的学习,我们将了解到C++程序设计的初步知识,学会编写第1个C++程序,掌握C++语言的必学基础知识。这些基础知识包括常量和变量、数据类型和声明、运算符和表达式、程序控制结构和语句、算法和流程图、数组、函数、指针、输入和输出等内容,为后面深入学习C++奠定根基。

那么,我们就开始进入精彩的C++编程世界吧!

第1章 开始C++编程之旅—Hello,C++

第2章C++程序的基本组成

第3章 数据类型

第4章C++中的公式—运算符和表达式

第5章 程序控制结构和语句

第6章 程序设计的灵魂—算法与流程图

第7章 相同类型的数值表达—数组

第8章 常用代码的封装—函数

第9章 内存的快捷方式—指针

第10章 用户与计算机的交互—输入和输出

第1章开始C++编程之旅—Hello,C++

本章视频教学录像:50分钟

本章将带领读者步入C++的世界,开启C++大门—创建第1个C++应用程序,了解C++程序的开发过程。

本章要点(已掌握的在方框中打钩)

□ C++程序开发

□ 第1个C++程序

1.1 熟悉本书的开发平台—Visual C++ 6.0

本节视频教学录像: 14分钟

“工欲善其事,必先利其器”,因此首先应了解C++的开发环境。

C++开发环境,就是运行C++程序的平台,又称C++的编译器。使用标准化高、兼容性好和可移植性强的编译环境,对于C++开发人员来说非常重要,特别是对于程序设计语言的初学者。

C++编译器主要有Borland公司的Borland C++和Microsoft公司的Visual C++。鉴于易用性和通用性,我们选择Visual C++ 6.0作为本书C++的开发、编译环境。

1.1.1 Visual C++ 6.0概述

Visual C++ 6.0不仅是一个C++编译器,而且是一个基于Windows操作系统的可视化集成开发环境,它被集成在Visual Studio 6.0之中,但也可单独安装使用。

Visual C++6.0开发环境的界面由标题栏、菜单栏、工具栏、工作区窗口、编辑窗口、输出窗口以及状态栏等组成。Visual C++ 6.0界面如图所示。

1.1.2 Visual C++ 6.0下的开发步骤

在Visual C++ 6.0的菜单栏中,选择【File】★【New】菜单命令,即可打开如图所示的【New】对话框。

【New】对话框中包含4个选项卡,初学者可先了解如下两个部分。

1.【Projects】选项卡

【Win 32 Console Application】:用于创建控制台(即命令提示符窗口)下的程序的项目。

2.【Files】选项卡

【C/C++Header File】:用于创建扩展名为.h的C或C++的头文件。

【C++ Source File】:用于创建扩展名为.cpp的C++的源程序文件。

1.1.3 项目管理——工作区窗口

Visual C++ 6.0是通过项目工作区窗口对项目进行管理的。工作区窗口如图所示。

工作区窗口共有以下3个标签,分别代表3种视图形式。

⑴ 【Class View】(类视图):用以显示项目中的所有的类信息。

⑵ 【ResourceView】(资源视图):包含了项目中所有资源的层次列表。每一种资源都有自己的图标。在字符界面或者控制台界面中没有该项,只有Windows程序下才出现。

⑶ 【FileView】(文件视图):可将项目中的所有文件分类显示,每一类文件在【FileView】页面中都有自己的目录项。可以在目录项中移动文件,创建新的目录项,还可以将一些特殊类型的文件放在该目录项中。

1.1.4 窗体及代码编辑——编辑窗口

在Visual C++ 6.0中,对代码或资源的一切操作都是在编辑窗口中进行的。

当创建C++源程序时,编辑窗口作为代码编辑窗口使用,可进行输入、修改及删除代码等操作。

1.1.5 程序调试——输出窗口

编译器在Output窗口中给出语法错误和编译错误信息,窗口如图所示。

【error(s)】(语法错误):鼠标双击错误信息后程序跳转到错误源代码处,一个语法错误可以引发多条错误信息,因此修改一个错误后,最好重新编译一次,以便提高工作效率。

【warning(s)】(警告信息):一般是由于违反了C/C++的规则,因而系统给出警告信息。警告信息不会影响程序的执行。

1.1.6 程序运行——输出窗口

当程序error(s)和warning(s)都为0时,接下来运行程序。单击BuildExecuture(Ctrl+F5)运行后输出的结果如下。

当看到Press any key to continue时,可以按下键盘上的任意键而使这个输出窗口消失。

1.2 C++程序开发

本节视频教学录像: 7分钟

在系统地学习C++之前,我们先简单了解一下程序的开发过程和基本概念。

1.2.1 基本概念

源程序:用源语言写的、没有翻译的程序。C++源程序文件的扩展名为.cpp。

目标程序:是源程序通过翻译加工以后所生成的程序。目标程序可以用机器语言表示(因此也称为“目标代码”),也可以用汇编语言或其他中间语言表示。C++目标程序文件的扩展名为.obj。

翻译程序:是指用来把源程序翻译为目标程序的程序。对翻译程序来说,源程序作为输入,经过翻译程序的处理,输出的是目标程序。

翻译程序有3种不同类型:汇编程序、编译程序和解释程序。

汇编程序:它的任务是把用汇编语言写成的源程序翻译为机器语言形式的目标程序。因此,用汇编程序编写的源程序先要经过汇编程序的加工,变为等价的目标程序。

编译程序:如果源程序使用的是高级程序设计语言,经过翻译程序加工生成目标程序,那么,该翻译程序就称为“编译程序”。所以,高级语言编写的源程序要在计算机上运行,通常首先要经过编译程序加工生成机器语言表示的目标程序。目标程序用的是汇编语言,因此还要经过一次汇编程序的加工。

解释程序:它也是一种翻译程序,同样是将使用高级语言编写的源程序翻译成机器指令。它与编译程序的不同之处是,编译是指将源代码(静态的)转换成机器代码并保存,最终执行的是程序的机器码形式,而解释是指逐句地读入源代码,逐一地翻译实现其功能,翻译过程不产生实际的机器码,更不保存。

另外,还有混合型,如JIT(Just In Time)即时编译技术。

1.2.2 C++程序开发过程

编译环境是程序运行的平台。一个程序在编译环境中,从编写代码到生成可执行文件,最后到运行正确,需要经过编辑、编译、连接、运行和调试等几个阶段。

编辑阶段:在集成开发环境下创建程序,然后在编辑窗口中输入和编辑源程序,检查源程序无误后保存为.cpp文件。

编译阶段:源程序经过编译后,生成一个目标文件,这个文件的扩展名为.obj。该目标文件为源程序的目标代码,即机器语言指令。

连接阶段:将若干个目标文件和若干个库文件(lib)进行相互衔接,从而生成一个扩展名为.exe的文件,也就是可执行文件。该文件适应一定的操作系统环境。库文件是一组由机器指令构成的程序代码,是可连接的文件。库有标准库和用户生成的库两种。标准库由C++提供,用户生成的库是由软件开发商或程序员提供的。

运行阶段:运行经过连接生成的扩展名为.exe的可执行文件。

调试阶段:在编译阶段或连接阶段有可能出错,于是程序员就要重新编辑程序和编译程序。另外,程序运行的结果也有可能是错误的,也要重新进行编辑等操作。

程序开发过程如图所示。

1.3 第1个C++程序——Hello,world

本节视频教学录像: 29分钟

本节通过在Visual C++ 6.0中创建一个简单的Hello World程序,来了解C++的编程过程以及Visual C++ 6.0的具体操作。

1.3.1 创建源程序

【范例1-1】 在Visual C++ 6.0中创建源程序,目的是在命令行中输出“Hello,world!”。

⑴ 选择【开始】★【程序】★【Microsoft Visual Studio 6.0】★【Microsoft Visual C++ 6.0】菜单项,运行Visual C++ 6.0。

提示

第1次运行时,将显示【Tip of the Day】对话框,单击【Next Tip】按钮,可以看到各种操作的提示。若撤选左下角处的【Show tips at starup】复选框,以后运行Visual C++ 6.0时,将不再出现该对话框。

⑵ 选择【File】★【New】菜单命令,在弹出的【New】对话框中选择【Files】选项卡。

⑶ 在左侧列表框中选择【C++ Source File】选项,在右侧【File】文本框中输入程序名称“Hello,World”,并单击按钮,选择该文件保存的位置(如“D:\Final\ch02\范例2-1\Hello World”)。

⑷ 单击【OK】按钮,此时光标定位在Visual C++ 6.0的编辑窗口中,然后在编辑窗口中输入以下代码(代码2-1.txt)。

      01 #incIude<iostream>
      02 using namespace std;
      02 void main()                       //定义主函数
      03 {
      04   cout<<"HeIIo,worId!"<<endI;    //在命令行中输出“HeIIo,worId!”并换行
      05 }

【代码详解】

C++程序是从main函数开始执行的。该函数只有一条语句“cout<<"Hello,world!"<<endl;”,用于输出字符串“Hello,world!”。

cout是系统定义的输出流对象,它是通过using namespace std进行定义的。“<<”是插入运算符,与cout一起使用,它的作用是将“<<”右边的字符串“Hello,world!”插入到输出流中,C++系统将输出流的内容输出到标准输出设备(一般是显示器)上。

endl的作用是换行。

语句完成后用英文的分号“;”作为结束符。

1.3.2 编译、连接和运行程序

源程序创建完毕,还需要编辑、连接、运行,才能输出程序的结果。具体步骤如下。

⑴ 编译程序。选择【Build】★【Compile Hello,world.cpp】菜单项,对“Hello,world.cpp”进行编译。选择该命令后,会弹出如图所示的对话框。

技巧

单击【是】按钮,建立一个默认的项目工作区,然后编译系统开始编译程序,检查程序的语法错误,在输出窗口中输出编译信息。如果有错,则会指出错误的位置和性质,没有错误或警告时则会提示“Hello,world.obj -0 error(s), 0 warning(s)”。

⑵ 连接程序。选择【Build】★【Build Hello,world.exe】菜单项,对程序进行连接,如果连接成功将生成“Hello,world.exe”文件。

⑶ 运行程序。选择【Build】★【!Execute Hello,world.exe】菜单项,运行“Hello,world.exe”,即可在命令行中输出“Hello,world!”的字样。

输出结果中的“Press any key to continue”是系统生成的,提示按任意键返回编辑窗口。

提示

也可以使用【Build Minibar】工具栏进行编译、连接和运行。按钮表示编译,按钮表示连接,按钮表示运行。

【拓展训练】

在C++中输出“你好,中国!”。

既然能输出“Hello,world!”,那么想输出“你好,中国!”,该怎么办?

只需要将上面一段程序中第4行语句中的引号里面的内容改为想要输出的内容即可。在此改为“你好,中国! ”。

      cout<<"你好,中国!"<<endI;

如果要输出两行该怎么办?

只需要使用两个cout命令行分别输出(例如“我开始喜欢C++了”和“征服C++已经开始了……”)即可。

      cout<<"我开始喜欢C++了"<<endI;
      cout<<"征服C++已经开始了……"<<endI;

注意

双引号以外的标点符号必须用英文形式。

1.3.3 常见错误

对于初学者来说,刚接触C++编程语言,难免会出现一些错误,而且出了错还不知怎么回事,不知道该怎么进行修改,下面将就初学者常遇到的一些语法错误进行说明。

1.语句上的符号为中文符号

      cout<<"heIIo,worId!";
      cout<<"heIIo,worId!";

对比两者你发现了什么?对,就在于引号的不同。第一个为中文符号,在C++世界里这是绝对不允许的,编译器对此无法识别,代码中除了" "当中可以出现中文符号之外,别的地方不可以出现,在后面学习中将有讲解。

      cout<<"heIIo, worId!";

当我们进行编译时,将会出现如下错误提醒。

此处将“;”写为中文格式的分号,在C++世界里这是不允许的。

2.语句后面漏分号

C++规定,语句末尾必须有分号,分号是C++语句不可缺少的部分。这也是和其他语言不同的。当输入为cout<<"Hello,world!"<<endl,然后对其编译,程序将会出现如下的提醒。

1.3.4 打开已有文件

若一个程序已经建立,当再次需要它时该如何找到这个程序,并将其打开呢?如果是最近几次编译的程序,可以单击VC编译器上的【File】,然后找到【Recent File】,在里面找到对应的程序。如果程序已经编译的时间已久,且这种方式未能找到,我们可用接下来的这种方式。打开已编辑好的程序,找到它所在的存储位置。以上面编辑的程序为例,依次选择【计算机】★【D盘】★【Final】★【ch01】★【hello world】,将看到如下文件列表。

对程序进行编译后,将生成上面图片所显示的几个文件。下面介绍各文件扩展名所代表的意思。

① CPP:用C++语言编写的源代码文件。

② DSP:VC开发环境生成的工程文件,VC 4及以前版本使用MAK文件来定义工程。该类文件是项目文件,采用文本格式。

③ DSW:VC开发环境生成的WorkSpace文件,用来把多个工程组织到一个WorkSpace中。该类文件属于工作区文件,与.DSP类似。

④ NCB:NCB是“No Compile Browser”的缩写,其中存放了供ClassView、WizardBar和Component Gallery使用的信息,由VC开发环境自动生成。无编译浏览文件。当自动完成功能出问题时可以删除此文件,编译工程后会自动生成。

⑤ OPT:VC开发环境自动生成的用来存放WorkSpace中各种选项的文件,是工程关于开发环境的参数文件,如工具条位置信息等。

⑥ PLG:编译信息文件,编译时的错误和警告信息文件。

⑦ Debug文件夹是VC软件编写的程序在执行时自动新建的一个文件夹,用于存放调试信息。

我们可以通过打开扩展名为.cpp的源文件或扩展名为.dsw的文件,进入Visual C++ 6.0的开发环境。接下来就可以进行我们需要的操作了。在这里建议通过扩展名为.dsw的文件进行打开,因为在以后的章节中会涉及到工程文件,此时会有多个C++源文件生成。.dsw的文件通常指向多个.dsp文件,通过.dsw文件可以同时连接多个源文件。

我们在编程时发布需要生成Release模式,如果是Debug形文件也可以通过下面的步骤进行转换,步骤如下。

【Tool】★【Custumize】★【Commands】★【Category】下面的【Build】—将右侧buttons里的矩形框图拖到工具栏处,然后就可以进行Debug和Release的更改。

更改后编译程序,将会有下图文件列表生成。

Debug通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release称为发布版本,它往往进行了多种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。我们使用的软件多是Release版本的。Debug和Release并没有本质的界限,它们只是一组编译选项的集合,编译器只是按照预定的选项进行编译链接。

1.3.5 创建并运行多文件程序

若一个程序包含多个源程序文件,则需要建立一个项目文件,项目文件扩展名为.dsp(保存项目设置)。项目文件用于维护应用程序中所有的源代码文件,并编译、连接应用程序,以便创建可执行程序。项目工作区文件的扩展名为.dsw,用于保存项目工作区的设置,它可以有一个项目以及若干个子项目,但只有一个活动的项目。

有两种创建方法,一种是用户建立项目工作区和项目文件,另一种是用户建立项目而系统建立项目工作区。下面介绍第2种方法。

【范例1-2】 输出“Hello,world!”。

⑴ 选择【File】★【New】菜单项,弹出【New】对话框,选择【Projects】选项卡,选择【Win32 Console Application】选项,在【Projects name】文本框中输入项目的名称“Hello World”,在【Location】文本框中输入或选择项目所在的位置“D:\Final\CH02\范例2-2\Hello World”。

⑵ 单击【OK】按钮,弹出【Win32 Console Application - Step 1 of 1】对话框,选中【A simple application】单选按钮,当然也可以选择其他单选按钮,如空项目类型。

⑶ 单击【Finish】按钮,弹出【New Project Information】对话框,对新项目进行说明。

⑷ 单击【OK】按钮,进入Visual C++ 6.0开发环境。在项目工作区可以看到【ClassView】和【FileView】两个标签项。

切换到 【FileView】标签项,可以看到AppWizard(应用向导)生成了4个文件:Hello world.cpp、stdafx.cpp、stdafx.h和ReadMe.txt。扩展名为.cpp的文件又称实现文件,扩展名为.h的文件又称头文件。

ReadMe.txt是Visual C++ 6.0为每个项目配置的说明文件,它包括AppWizard产生的“真正”具有实际意义的程序源代码,用户的代码将添加在该文件中。

选择【ClassView】标签项,将显示Hello World类信息,单击各目录项前面的“+”号,可将所有的目录项展开。双击main函数名,在编辑窗口中会自动打开main函数所在的Hello World.cpp源文件,且光标已经定位到该文件中。

⑸ 在Hello World.cpp代码编辑窗口输入以下代码(代码1-1-1.txt)。

      01 #incIude<iostream>
      02 using namespace std;
      03 void show();     //声明show函数
      04 int main()       //主函数,程序的入口
      05 {
      06   cout<<"HeIIo"; //输出HeIIo
      07   show();       //调用show函数
      08   return 0;      //返回0结束程序
      09 }

⑹ 添加另外一个文件ShowWorld.cpp。选择【Projects】★【Add to Project】菜单项,然后在其子菜单中选择【New】菜单项,即可新建文件,选择【Files】菜单项可以添加已有的文件。

⑺ 选择【New】菜单项,打开【New】对话框。输入文件名“Show World”,文件路径最好不要更改,这样的话多个源程序都会在同一个目录下。

⑻ 单击【OK】按钮,此时光标定位到Show World.cpp文件中。在该代码窗口中输入以下代码(代码1-1-2.txt)。

      01 #incIude<iostream>
      02 using namespace std;
      03 void show()             //定义show函数
      04 {
      05   cout<<"WorId!"<<endI;  //输出WorId!并换行
      06 }

【运行结果】

⑴ 选择【Build】★【Build Hello world.exe】菜单项,对程序进行连接。

⑵ 选择【Build】★【!Execute Hello world.exe】菜单项,运行“Hello world.exe”,即可在命令行中输出如图所示的结果。

【范例分析】

C++程序都是从main函数开始执行的,先输出“Hello”,然后调用show函数输出“World”。show函数不在Hello World.cpp文件中,而是在Show World.cpp文件中,所以需要对该函数进行声明。

提示

程序已经完成,不再对其进行操作了,该怎么办?

选择【File】★【Close Workspace】菜单项,关闭工作区,即可结束对程序的操作。如果想再次打开,选择【File】★【Open Workspace】菜单项,找到.dsw文件打开即可;或者选择【File】★【Recent Workspace】菜单项,打开最近的工作区。

提示

项目工作区可以包含多个项目,那么怎样添加多个项目,又怎样添加已存在的文件呢?

方法一:在【New】对话框中选择【Projects】选项卡,选择控制台程序,输入工程名及保存位置,项目工作区默认是创建。这里选择添加到当前工作区,并确定是否存在依赖关系。

方法二:在项目工作区上选择【FileView】标签项,在工作区项目上单击鼠标右键选择【Insert Project Into Workspace】菜单项,在弹出的对话框中选择要添加的工程文件(.dsp文件)。

移除工程时,首先选定要移除的工程名,然后选择【Edit】★【Delete】菜单项即可。

1.4 实战练习

操作题:在C++中编写一个应用程序,要求实现以下功能:输出“我爱学习C++,C++学习So easy”。