C++从入门到精通(第2版)

978-7-115-37530-8
作者: 龙马高新教育 国家863中部软件孵化器
译者:
编辑: 张翼
分类: C++

图书目录:

详情

本书面向C++的零基础读者,介绍基础入门知识和实际操作技巧。全书紧贴软件开发的实际需求,首先向读者展示语言的背景知识和应用范围,之后通过实例和自测,系统讲解相关知识点,同时兼顾实际开发项目经验。为了增强实用性,光盘中还特别赠送了精选的考试认证、求职面试等题库,供读者研究学习。最后,为帮助初入职场的从业者顺利进入角色,还在光盘中赠送了职业规划建议及相关开发文档。

图书摘要

C++从入门到精通(第2版)

龙马高新教育 策划

国家863中部软件孵化器 编著
人民邮电出版社

北京

前言

“从入门到精通”系列是专为初学者量身打造的一套编程学习用书,由知名计算机图书策划机构“龙马高新教育”精心策划而成。

本书主要面向C++初学者和爱好者,旨在帮助读者掌握C++基础知识、了解开发技巧并积累一定的项目实战经验。当读者系统地学习完本书内容之后,就可以骄傲地宣布——“我是一名真正的C++程序员了!”。

为什么要写这样一本书

荀子曰:不闻不若闻之,闻之不若见之,见之不若知之,知之不若行之。

实践对于学习的重要性由此可见一斑。纵观当前编程图书市场,理论知识与实践经验的脱节,是很多C++图书的写照。为了杜绝这一现象,本书立足于实战,从项目开发的实际需求入手,将理论知识与实际应用相结合。目标就是让初学者能够快速成长为初级程序员,并拥有一定的项目开发经验,从而在职场中拥有一个高起点。

C++的最佳学习路线

本书总结了作者多年的教学实践经验,为读者设计了最佳的学习路线。

本书特色

▶零基础、入门级的讲解

无论读者是否从事计算机相关行业,是否接触过C++,是否使用C++开发过项目,都能从本书中找到最佳起点。

▶超多、实用、专业的范例和项目

本书结合实际工作中的范例,逐一讲解C++的各种知识和技术。最后,还以实际开发项目来总结本书所学内容,帮助读者在实战中掌握知识,轻松拥有项目经验。

▶随时检测自己的学习成果

每章首页罗列了“本章要点”,以便读者明确学习方向。每章最后的“实战练习”则根据所在章的知识点精心设计而成,读者可以随时自我检测,巩固所学知识。

▶细致入微、贴心提示

本书在讲解过程中使用了“提示”、“注意”、“技巧”等小栏目,帮助读者在学习过程中更清楚地理解基本概念、掌握相关操作,并轻松获取实战技巧。

超值光盘

▶18小时全程同步教学录像

涵盖本书所有知识点,详细讲解每个范例及项目的开发过程及关键点。帮助读者更轻松地掌握书中所有的C++程序设计知识。

▶超多王牌资源大放送

赠送大量王牌资源,包括18小时Oracle项目实战教学录像、118页库函数查询手册、19页C++常用查询手册、10套超值完整源代码、50个C++常见面试题及解析电子书、30个C++常见错误及解决方案电子书、51个C++高效编程技巧、C++程序员职业规划、C++程序员面试技巧等。

读者对象

▶没有任何C++基础的初学者

▶有一定的C++基础,想精通C++的人员

▶有一定的C++基础,缺乏C++实战经验的人员

▶大专院校及培训学校的老师和学生

光盘使用说明

01.光盘运行后首先播放片头动画,之后进入光盘的主界面。其中包括【课堂再现】、【Oracle项目实战教学录像】两个学习通道,和【范例源码】、【实战练习答案】、【赠送资源】、【帮助文件】、【退出光盘】五个功能按钮。

02.单击【课堂再现】按钮,进入多媒体同步教学录像界面。在左侧的章号按钮上单击鼠标左键,在弹出的快捷菜单上单击要播放的节名,即可开始播放相应的教学录像。

03.单击【Oracle项目实战教学录像】按钮,打开教学录像文件夹,在其子文件夹中选择要播放的视频文件,即可播放录像。

04.单击【范例源码】按钮,可打开本书范例源码文件夹。

05.单击【实战练习答案】按钮,可在打开的文件夹中看到实战练习答案。

06.单击【赠送资源】按钮可以查看随本书赠送的资源。

07.单击【帮助文件】按钮,可以打开“光盘使用说明.pdf”文档,该说明文档详细介绍了光盘在电脑上的运行环境及运行方法等。

08.单击【退出光盘】按钮,即可退出本光盘系统。

网站支持

更多学习资料,请访问www.51pcbook.cn。

创作团队

本书由龙马高新教育策划,河南工业大学谭玉波任主编,河南工业大学王锋、张浩军、王宏勇任副主编。其中河南工业大学张浩军负责编写第0~1章,周德祥负责编写第2~3章,王锋负责编写第4~6章,王宏勇负责编写第7~9章,王献荣负责编写第10~12章,张春燕负责编写第13~15章,胡江汇负责编写第16~18章,谭玉波负责编写第19~23章以及附录部分。参加资料整理工作的人员还有高鹏飞、王润芝、白明亮、张学配、王亚兵、孔万里、李震、赵源源、乔娜、周奎奎、王果、陈小杰、左琨、邓艳丽、崔姝怡、侯蕾、左花苹、刘锦源、普宁、王常吉、师鸣若、钟宏伟、陈川、刘子威、徐永俊、朱涛和张允等。

在编写过程中,我们竭尽所能地将最准确的C++理解和感悟呈现给读者,但也难免有疏漏和不妥之处,敬请不吝指正。若您在学习过程中遇到困难或疑问,或有任何建议,可发送电子邮件至zhangyi@ptpress.com.cn。

编者

第0章 关于C++——C++程序设计入门

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

C++作为一种面向对象程序设计的首选语言,吸引了许许多多的编程学习者。掌握C++编程,理论上可以实现任何系统。本章将带领初学者认识C++的编程世界,了解C++的起源。

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

□ C++概述

□ 结构化程序设计

□ 面向对象程序设计

□ C与C++的区别

0.1 C++概述

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

C++语言是当今应用最广泛的面向对象程序设计的语言,它包括C的全部特征、属性和优点。同时,增加了对面向对象编程的完全支持。目前,面向对象程序设计的语言很多,如Smalltalk、Java、Visual Basic、C++等。其中,核心的C++语言是当前最流行和实用的程序设计语言之一。

0.1.1 C++能做什么

C++涉及的领域很多,从大型的项目工程到小型的应用程序,C++都可以开发,例如操作系统、大部分游戏、图形图像处理、科学计算、嵌入式系统、驱动程序、没有界面或只有简单界面的服务程序、军工、工业实时监控软件系统、虚拟机、高端服务器程序、语音识别处理等。可以说,掌握了C++就掌握了整个软件工业的开发。

C++的优点吸引了很多程序将其作为开发的语言,用C++开发的优秀作品数不胜数。下面列出一些著名的用C++编写的软件产品。

1.办公应用

Microsoft公司的Office系列软件。

2.图像处理

Adobe 公司的所有主要应用程序都是使用C++开发而成的,图像处理利器Photoshop就是其中之一,如图所示。

3.网络应用

例如,百度网站的Web搜索引擎。

4.网络即时通信

例如,目前国内使用最广泛的聊天软件之一—— QQ。

5.手机操作系统

之前在智能手机中应用最广泛的Symbian操作系统也是用C++编写的。

6.游戏开发方面

由于C++在工程性、运行效率及维护性上都有很大优势,所以大部分网络游戏和单机游戏都是用C++编写的。单机版的游戏,例如Windows自带的游戏都是采用C++编写。网络游戏方面,如腾讯公司的大部分QQ游戏也采用C++编写。下图是一款QQ游戏的界面。

0.1.2 C++的由来

C++语言起源于C语言,是在C语言的基础上增加了面向对象程序设计的要素而发展起来的。

1979年,Bjarne Stroustrup在Bell实验室,开始从事将C改良为带类的C(C with classes)的工作,并于1983年将该语言正式命名为C++。

20世纪90年代,程序员开始慢慢从C中淡出,转入C++。此后,C++稳步发展,1998年ISO/ANSI C++标准正式制定。

此后,经过不断的改进,发展成为今天的C++。相对于C语言来说C++语言引入了两个新方面:其一,就是面向对象(具体来说就是类);其二,就是模板技术。模板是C++中比较复杂的部分,但是对于一个真正的C++程序员,这部分很重要,尤其是对C++标准程序库的掌握尤为重要。

提示

C++源于C语言,但并不是简单地在C的基础上加上类而已,如果这样认为,读者是学不好C++的。读者应该把C++当做一门新语言来学习。

0.1.3 C++的特点

C++语言是当今应用最广泛的面向对象的程序设计语言之一,因此具有面向对象程序设计的特点。C++的主要特点如下。

1.封装性

封装是把函数和数据封藏起来,把它看成一个整体。封装是面向对象的重要特征。首先它实现了数据隐藏,保护了对象的数据不被外界随意改变;其次它使对象成了相对独立的功能模块。对象好像是一个黑匣子,表示对象属性的数据和实现各个操作的代码都被封装在黑匣子里,从外面是看不见的。

更为形象的比喻,就像建造楼房需要设计人员、泥水匠、漆匠、水电工、监查人员、装修人员等不同工种的人来共同完成一样。在编程时,也需要不同“工种”的人。这里所谓“工种”就是能够完成某项工作的“类”,所谓“工人”就是类的对象。

C++通过建立类这个数据类型来支持封装性。使用对象时,只须知道它向外界提供的接口,而无须知道它的数据结构细节和实现操作的算法。

2.继承性

通过上面的举例说明,所谓类不过是对一种“工种”的描述,而类的对象,就对应为担当这种“工种”的工人。接下来举另一种“工种”——教师来说明继承的概念。教师的工作是备课、上课、批作业、监考、改卷等,这些都是作为教师这个“类”的方法,而对于一位教师来说,教龄和执教年级也不同,所以这些就属于教师这个“类”的成员变量。

那么,假设现在有两位老师,一位张老师,一位赵老师,按以前的说法,这两位老师就是教师这一工种的对象,那么就应该是相同的。事实不是如此,因为张老师是语文老师,而赵老师是数学老师,二者自然有所不同。换言之,教师这个工种是一个大工种,还有更细的分工,就如上面所言的数学老师、语文老师、物理老师、化学老师等。所有老师共有的工作大家都有,只是实现方式上各有不同。在面向对象的语言里,也有对这种现象的模拟,叫作“继承”。

可以这样说,语文教师继承了教师,数学教师也继承了教师,两者既都继承了教师,都拥有教师该具备的素质(指能够备课、讲课等能力),又根据自身学科的不同而有所不同。

在C++里,可以把教师这个职业叫作基类,语文教师、数学教师等叫作派生类。从这个例子中很容易看出,基类拥有的是派生类共有的方法和属性,派生类则根据自身的特点对这些方法进行实现,对这些属性进行操作。

3.多态性

继续以教师的例子来说明。对于学校来说,基本的物理单位就是教室,教室是教师用来上课的地方,可是教室没有规定具体哪一个老师才能来上课,对它来说,它只提供老师上课的地点,也就是说它只知道老师会来这里上课,具体谁来上,怎么上它并不关心。当然,虽然教室没有做硬性规定,学生们也不会担心,因为每个老师都知道自己该怎么上课。像这种情况,教室只要求了一个大工种(教师)的限制,而具体每个老师怎么上课则由老师自己的具体工种(语文老师还是数学老师)来决定。在C++里也有模拟,叫作多态。有了多态之后,在设计软件的时候,就可以从大的方向进行设计,而不必拘泥于细枝末节,因为具体怎么操作都由对象自己负责。

另外,C++的模板也是C++语言开发中比较重要的一部分,我们在后续章节会介绍。

0.2 程序设计概述

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

程序设计是指设计、编制、调试程序的方法和过程。程序设计方法有两种,一种是结构化程序设计,另外一种是面向对象程序设计。

0.2.1 结构化程序设计

结构化程序设计的主要思想是功能分解并逐步求精。结构化程序设计方法是由E.Dijkstra等人于1972年提出来的,它建立在由Bohm、Jacopini证明的结构定理的基础上。结构定理指出:任何程序逻辑都可以用顺序、选择和循环等3种基本结构来表示,如图所示。

0.2.2 面向对象程序设计

与结构化程序设计相比,面向对象的程序设计更易于实现对现实世界的描述,因而得到了迅速发展,并对整个软件开发过程产生了深刻影响。面向对象程序设计的本质是把数据和处理数据的过程看成一个整体——对象。

也就是说,面向对象程序设计是以“对象”为中心进行分析和设计的,使这些对象形成了解决目标问题的基本构件,即解决从“做什么”到“怎么做”的问题。其解决过程是先将问题空间划分为一系列对象的集合,再将对象集合进行分类抽象,一些具有相同属性行为的对象被抽象为一个类,类还可抽象分为派生类。采用继承的方式实现基类和派生类之间的联系,形成结构层次。

0.3 C、C++与Visual C++

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

可能许多初学者分不清C、C++与Visual C++之间的区别,本节将详细介绍这些基本概念之间的区别。

0.3.1 C与C++

C++从C进化而来,继承了其高效灵活性。虽然C++源于C语言,但并不是在C的基础上增加了类而已,如果这样认为,读者是学不好C++的。C++绝不单是C的升级或扩充。如果C++一开始被称作Z语言,大家一定不会把C和Z语言联系得那么紧密,因此,读者应该把C++当做一门新语言来学习。

下面是一个输出字符串的例子,分别用C语言和C++语言编写。

用C语言编写程序代码如下:

/*这是一个简单的C程序 : simple.c */

#include <stdio.h>         //*包含标准的输入输出库 */

void main()

{

printf( "Hello World !\n " );     //输出字符串

}

用C++语言编写同样功能的程序代码如下:

//这是一个简单的C++程序:simple.cpp

#include <iostream>        //包含标准库中的输入输出流头文件

using namespace std;

void main()

{

cout<<"Hello World ! "<<endl;   //输出字符串

}

C++程序与C程序的比较如下。

⑴C++程序与C程序的结构完全相同。

⑵C源程序文件的扩展名为.c,C++源程序文件的扩展名为.cpp。

⑶C中的注释使用符号“/*”和“*/”,表示符号“/*”和“*/”之间的内容都是注释;C++除了支持这种注释,还提供了双斜线“//”注释符,“//”之后的本行内容是注释,注释在行尾自动结束。

⑷C程序所包含的标准输入、输出的头文件是stdio.h,输入、输出通常通过调用函数来完成;而C++程序可以包含标准输入流、输出流的头文件iostream,输入、输出可以通过使用标准输入流、输出流对象来完成。

0.3.2 C++与Visual C++

Visual C++不是一门计算机语言,它是当今Windows操作系统下最流行的C++集成开发环境之一,是使用最广的C++编译器。目前常用的版本是Visual C++ 6.0。Visual C++编译器负责将C++源代码编译成汇编文件、转换为中间文件(.obj文件),然后使用连接器将相关的中间文件连接在一起,生成可执行的二进制文件(.exe文件)。其过程如下。

⑴源程序经过预处理后交给编译器。

⑵如果代码无误,编译器将代码生成汇编程序,再生成若干个目标程序。

⑶连接器负责对目标程序进行连接,生成可执行的程序。

0.3.1小节中的C++源程序在Visual C++ 6.0中经过以上处理过程后,会在命令行中输出如图所示的结果。

本书的程序实例均在Visual C++ 6.0编译器中调试通过。Visual C++ 6.0的操作会在本书第1章中具体讲解。读者需要在以后的学习中多用、多试、多思考,才能够熟练地掌握C++和Visual C++ 6.0。

0.3.3 C++初学者建议

对于初学者,我们不需要对学习C++望而生畏。其实,C++并没有什么特别难学的地方。它就是一门语言,我们把它当作一门语言来学,其实它是非常简单的。简单来说,是将一些符合C++程序设计的简单语句放在一起,实现一些比较复杂的程序过程。在学习C++时,我们应该做到如下几点。

⑴不要浮躁,要有一个平静的心。一开始学习的C++代码,它们的功能很简单,但是我们不要认为C++原来就只是干这么简单的事情,其实不是,这些只是用来练习。当你对所有的C++语法都熟练了,再运用你聪明的大脑,就可以做出复杂的程序。

⑵在开始阶段,看到代码就要模仿,不要偷懒。要把书上的程序例子亲手输入到计算机上实践,即使配套光盘中有源代码。

⑶学习编程的秘诀是:编程,编程,再编程。

⑷把在书中看到的有意义的例子扩充。

⑸不要放过任何一个看上去很简单的小编程问题——它们往往并不那么简单,或许可以引伸出很多知识点。

⑹别心急!设计C++的class确实不容易。自己程序中的class和自己的class设计水平是在不断的编程实践中完善和发展的。

⑺请重视C++中的异常处理技术,并将其切实地运用到自己的程序中。

⑻经常回顾自己以前写过的程序,并尝试重写,把自己学到的新知识运用进去。

⑼热爱C++!

第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 #include<iostream>

02 using namespace std;

02 void main()          //定义主函数

03 {

04 cout<<"Hello,world!"<<endl;  //在命令行中输出“Hello,world!”并换行

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<<"你好,中国!"<<endl;

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

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

cout<<"我开始喜欢C++了"<<endl;

cout<<"征服C++已经开始了……"<<endl;

注意

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

1.3.3 常见错误

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

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

cout<<"hello,world!";

cout<<"hello,world!";

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

cout<<"hello, world!";

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

此处将“;”写为中文格式的分号,在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 #include<iostream>

02 using namespace std;

03 void show( );  //声明 show函数

04 int main( )   //主函数,程序的入口

05 {

06 cout<<"Hello "; //输出Hello

07 show();   //调用 show函数

08  return 0;   //返回0结束程序

09 }

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

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

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

01 #include<iostream>

02 using namespace std;

03 void show()      //定义 show函数

04 {

05 cout<<"World!"<<endl; //输出World!并换行

06 }

【运行结果】

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

⑵选择【Build】【!Execute Hello world.exe】菜单项,运行“Helloworld.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”。

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

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

经过第1章的学习,我们已经对C++编程有了一个初步的认识和感知。知道了如何在C++的编辑窗口编辑代码,和经过编译连接就生成了可以被计算机执行的语言,然后就像我们操作普通软件一样,单击一下运行按钮即可开始运行。第2章我们将学习C++程序的基本组成。

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

□ 预处理命令

□ 函数

□ 注释

□ C++代码编写规范

□ 使用帮助系统

2.1 预处理命令

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

在程序的开始部分含有以“#”开头的命令,它们是预处理命令。在C++中,有3类预处理命令:宏定义命令、文件包含命令和条件编译命令。例如,#include <iostream>是文件包含的预处理命令, iostream设置了C++的I/O相关环境,定义输入和输出流对象cin和cout等。

iostream是现在C++中规定的标准,目的在于使C++代码用于移植和混合嵌入时不受扩展名.hd的限制,避免因为.h而造成额外的处理与修改。iostream包含的基本功能和对应的旧头文件相同,但头文件的内容在名字空间std中。(在标准化的过程中,库中有些部分的细节被修改了,所以旧头文件和新头文件中的实体不一定完全对应。)一般情况下,应该用这个头文件,而iostream.h则是以前的用法,以后可能将被淘汰。加.h是C语言的用法,但在C++中也支持这种用法,主要是为了向下兼容C的内容,我们平时尽量不用这种方法。两者更本质的区别是iostream把标准C++库的组建放到一个名为std的namespace里面。而相对的iostream.h则将这些标准组件放到全局空间里,同时在标准化以后旧友C标准库也已经经过改造了。要使用iostream,就需要在代码中添加语句:using namespace std。

2.2 函数

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

C++程序由一个主函数和若干个其他函数组成。主函数即main函数,它是组成程序最基本的部分,表示程序执行的开始点。程序中可以使用系统提供的库函数,也可以使用自己编写的函数。一对大括号“{}”括起来的内容称为函数体。函数体是函数功能的实现(关于函数将在第9章介绍),其组成包括C++语句和控制结构(我们可能不是太熟悉这些内容,不要紧,在接下来的学习中我们会慢慢了解)。函数之间是可以相互调用的。

2.3 注释

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

注释是程序员为程序阅读者作的说明,是用来提高程序可读性的一种手段。注释应在编程的过程中同时进行。注释内容应包含:源程序的总体注释(文件名、作用、创建时间、版本、作者以及引用的手册、运行环境等,整体注释一般是写在代码的开头部分)、函数注释(目的、算法、使用的参数和返回值的含义、对环境的一些假设等)以及其他的少量注释。为了提高程序的可读性,注释有两种形式,即单行注释和多行注释。

⑴单行注释以“//”开头,直到该行结束。

//要注释的内容

⑵多行注释以“/*”开头,以“*/”结束,它们之间的内容都是注释内容。

/*注释内容的开始

注释内容结束*/

在加注释的地方你会看到字体变成绿色。C++编译时忽略注释,也就是不参加编译。

2.4 C++代码编写规范

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

C++程序语言的书写格式自由度高,灵活性强,随意性大。如一行内可写一条语句,也可写几条语句;一条语句也可分写在多行内。但这些书写特点使得C++程序比其他语言更难读懂。为了提高程序的可读性,使用规范的代码编写是非常重要和必要的。

2.4.1 代码编写规范的必要性

代码编写规范,可以使程序结构清晰、明了,程序代码紧凑,增加程序的可读性,特别是在团队开发程序的过程中,因此,写代码时遵守C++的规范是非常重要的。

2.4.2 如何将代码书写规范

为了增加程序的可读性,使其便于理解,编写程序时应按以下要点书写。

⑴一般情况下每个语句占用一行。一行输入完毕时按Enter键,光标会自动按C++规范跳到下一行指定位置。

⑵表示结构层次的大括号,写在该结构化语句第1个字母的下方,与结构化语句对齐,并占用一行。

⑶适当增加空格和空行。

⑷编写代码的同时,对一些主要代码进行注释;写完代码后,还要写一些文档等信息。

2.5 身边的老师——使用MSDN帮助

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

MSDN(Microsoft Developer Network Library),为用户提供了有关MFC类、函数库、运行库和WIN32 API函数等几乎所有Visual C++和Windows系统的技术信息,包括参数说明、使用方法和具体例子,它是广大程序员进行软件开发的必备工具。MSDN不在Visual C++安装程序中,需要单独安装。

2.5.1 MSDN帮助系统中主要的帮助文件

MSDN帮助系统中关于Visual C++ 6.0主要有以下一些内容。

1.Visual C++程序员指南

该帮助适用范围广泛,涵盖了初学者、C/C++程序员和MFC程序员等,界面如图所示。

2.Visual C++用户指南

该帮助主要介绍C++语言基础、Visaul C++的环境与使用、Runtime函数库以及MFC类库等,界面如图所示。

3.微软基础类库和模板参考信息

该部分提供了Microsoft Visual C++ 6.0基础类库(MFC)完整的参考手册,界面如图所示。

MSDN帮助系统还包括Visual C++语言、库文件信息和C++教程等。

2.5.2 MSDN帮助系统的使用

用户可以选择【Help】【Contents】菜单项进入帮助系统,也可以按【F1】键快速获取相关内容的帮助。如在编辑器中把光标定位在一个需要查询的单词处,然后按【F1】键即可。

通过目录定位,可以在【目录】选项卡中查看多级目录,双击某一项可以查看该目录的文档内容。

要想通过索引查找信息,可以在【索引】选项卡中输入关键字查找。

要想通过全文搜索查找信息,可以使用通配符在【搜索】选项卡中查找。

将在【目录】、【索引】和【搜索】等选项卡中得到的相关帮助文件设置为书签,以后就可以直接在【书签】选项卡中查看相关内容。

2.6 实战练习

回想一下,C++程序的组成部分有哪些?作用是什么?

图书在版编目(CIP)数据

C++从入门到精通/龙马高新教育策划;国家863中部软件孵化器编著.--2版.--北京:人民邮电出版社,2015.3

ISBN 978-7-115-37530-8

Ⅰ.①C… Ⅱ.①龙…②国… Ⅲ.①C语言—程序设计 Ⅳ.①TP312

中国版本图书馆CIP数据核字(2015)第005408号

内容提要

本书以零基础讲解为宗旨,用实例引导读者学习,深入浅出地介绍了C++的相关知识和实战技能。

本书第1篇【基础知识】主要讲解C++的基础知识、C++程序的基本组成、数据类型、运算符和表达式、程序控制结构和语句、算法与流程图、数组、函数、指针以及输入和输出等;第 2 篇【核心技术】主要讲解类和对象、命名空间、继承与派生以及多态与重载等;第3篇【高级应用】主要讲解文件操作、容器、模板、算法、函数对象、字符串操作和异常处理等;第 4 篇【项目实战】主要讲解项目规划,以及信息管理系统、图书信息管理系统和职工信息管理系统的开发流程。

本书所附DVD光盘中包含了与图书内容全程同步的教学录像。此外,还赠送了大量相关学习资料,以便读者扩展学习。

本书适合任何想学习 C++的读者,无论您是否从事计算机相关行业,是否接触过 C++,均可通过学习快速掌握C++的开发方法和技巧。

◆策划 龙马高新教育

编著 国家863中部软件孵化器

责任编辑 张翼

责任印制 杨林杰

◆人民邮电出版社出版发行  北京市丰台区成寿寺路11号

邮编 100164  电子邮件 315@ptpress.com.cn

网址 http://www.ptpress.com.cn

北京鑫正大印刷有限公司印刷

◆开本:787×1092 1/16

印张:31

字数:864千字  2015年3月第2版

印数:10301-15300册  2015年3月北京第1次印刷

定价:69.80元(附光盘)

读者服务热线:(010)81055410 印装质量热线:(010)81055316

反盗版热线:(010)81055315

广告经营许可证:京崇工商广字第0021号

相关图书

CMake构建实战:项目开发卷
CMake构建实战:项目开发卷
代码审计——C/C++实践
代码审计——C/C++实践
C++ Templates(第2版)中文版
C++ Templates(第2版)中文版
C/C++代码调试的艺术(第2版)
C/C++代码调试的艺术(第2版)
计算机图形学编程(使用OpenGL和C++)(第2版)
计算机图形学编程(使用OpenGL和C++)(第2版)
Qt 6 C++开发指南
Qt 6 C++开发指南

相关文章

相关课程