C++入门知识
C++是一门应用非常广泛的计算机程序设计语言。它既支持过程化程序设计,也支持面向对象程序设计。从操作系统、设备控制到数据库、网络、多媒体等众多的应用领域都能看到它的身影。目前,业界应用比较广泛的是它的两个变种:Borland C++和Visual C++。这两种C++都是在标准C++的基础上做了一些扩展而来。本书将基于Visual C++ 6.0版本的开发环境,向读者讲授标准C++的强大功能和编程方法。本章包括以下内容:
C++概述; 开发工具;
C++程序的结构; 编码规范; 标识符。
通过本章的学习,读者可以为后面的学习打好基础,并且可以对C++有一个基本认识。
1.1 概 述
C++作为当今业界应用最为广泛的编程语言之一,其涵盖的内容非常广泛而多样。本节将首先给读者一个初步的概念。
1.1.1 C++的发展史
C++由美国贝尔实验室的Bjarne Stroustrup博士在20世纪80年代初期发明并实现,最初被称作C with Classes。1983年,C with Classes被更名为C++。1985年10月发布了第一个商业化版本。同年,C++的第一本编程手册《C++程序设计语言》出版。1989年,发布了第二版。1990年,出版了The Annotated C++ Reference Manual。这本书后来成为标准化的基础。稍后又引入了模板、异常处理、命名空间、新的强制转型,以及布尔类型等特性。
ANSI-ISO委员会于1998年对C++进行了标准化:ISO/IEC 14882-1998。从此,C++成为一种具有国际标准的编程语言,通常被称作ANSI/ISO C++。2003年,又发布了该标准的修正版。2005年,一份名为Library Technical Report 1(简称TR1)的技术报告发布。事实上,至今为止没有任何一款编译器完全支持ISO C++,但是Borland C++和Visual C++已经足够强大。现在,Loki、MPL等程序库为代表的产生式编程和模板元编程的出现又给了C++一个新的发展高峰。
1.1.2 为什么要选择C++
C++语言是由C语言扩充而来。它是一门混合型的语言,既支持传统的结构化程序设计,
第1章 C++预备知识 又支持面向对象的程序设计,这使得C++非常流行。它在编程中支持面向对象。因此,它比C更适合人们的思考方式,并且比C要安全、可靠、有效。但是它并不像Java那样全面实现类的使用,这使得它很灵活,能够适应多种场合的需要。
C++是编译语言,性能良好,效率更高。它不像Java、PHP、ASP等解释型语言,需要在运行时转换为机器码,或者读一条语句执行一条。它直接被编译为机器可识别的机器码。
C++编写的程序独立性好。只要C++编译时产生的机器码不依赖外部的动态链接库,C++就可以在不需要安装额外程序的情况下,移动到运行同样操作系统的其他机器和微处理器上。而移动Java程序时需要先安装Java运行期库。这是C++语言成功流行的一个重要原因。
C++语言应用极为广泛。尤其在底层编程和系统级编程上更是C++的传统优势应用。在数据库和多媒体方面,C++又以其卓越的稳定性而赢得了荣誉。
1.1.3 对面向对象方法的支持
对象是人们要进行研究的任何事物。面向对象的核心思想是对象和对象间的消息,是建立在“对象”基础上的方法学。它将系统看做对象的组合,每个对象都能接受并处理数据,然后和其他对象通过消息来交换数据。面向对象编程具有以下3个基本特征:封装、继承和多态。
在C++中,用类来封装数据和数据上的操作,外界看不到该类的属性和方法。如果
需要的话,系统一般会为每个属性提供set/get函数对。
继承就是从父类继承旧的属性、参数等。C++可以进行公有、私有、保护3种类型的
继承。有时为了避免内存的浪费,也可以进行虚继承。虚继承中,整个继承体系里公有的基类将不会被重复分配空间。
多态指用多种形态来实现。C++中的多态包括函数重载、子类与基类间的覆盖、虚函
数、运算符重载以及抽象类等方式。
1.2 开 发 工 具
要想发挥C++的强大功能,就需要一个优秀的集成开发环境,因为一个好的编程环境常常可以起到事半功倍的效果。集成开发环境(IDE)是一个将程序编辑器、编译器、调试工具和其他建立应用程序的工具集成在一起,用于开发应用程序的软件系统。本节将向读者介绍常见的几款C++开发环境,并着重介绍本书所用到的开发环境。
1.2.1 常见的C++开发工具
目前,传统的C++开发工具有C++ Builder、Visual C++两种,新近又出现了Eclipse、Code::Blocks、Dev-C++、Mingw等开发工具。它们各有千秋,下面将简单介绍一下它们的 特性。
·3·
第1篇 面向过程的C++编程 1.Visual Studio
Visual Studio是微软公司推出的开发环境,它是目前最流行的Windows平台应用程序开发环境。在Visual Studio中可以创建应用程序和网络应用程序,以及智能设备应用程序和Office插件等。从7.0开始,Visual Studio加入了.Net技术,类似Java的JVM。目前,最新版本为9.0,也被称做Visual Studio 2008。如果不想使用.Net技术,6.0版本也是一个不错的选择。
说明:Visual Studio对标准C++做了扩展,习惯上将在Visual Studio中实现的C++称为
Visual C++,即VC。VC是目前使用最广泛的C++开发语言,Visual Studio也是使用最广泛的开发工具。 2.C++ Builder
C++ Builder是另一款比较流行的C++开发工具。它由Borland公司于1998年推出,也是Windows下的开发工具。C++ Builder具有高度安全性、高可靠性、快速性的编译优化方法,所以编译出的软件执行速度很快。所有符合ANSI/ISO标准的原代码都可以在C++ Builder中编译,而且支持最新的ANSI C++/C语言特征。
3.Dev-C++
Dev-C++是Windows平台下的开源C++编程环境。它集成了GCC、MinGW32等众多自由软件,界面类似Visual Studio,但体积要小的多。它的缺点是难以胜任规模较大的软件项目,但对于初学者是一个不错的选择。
4.Anjuta
Anjuta是一款GNOME桌面环境下的C/C++编程的集成环境,也是开源软件。它不仅有项目管理、交互式调试以及强大的代码编辑和语法增色的功能,还可以直接开发Glade图形界面的程序。但是,它主要用在Linux、UNIX平台下,不支持Windows平台。目前,最新版本是2.4.x,可以从anjuta.sourceforge.net站点获得。
5.Code::Blocks
Code::Blocks是一款全功能的、跨平台的C/C++集成开发环境,属于开源软件。它提供了众多的工程模板,包括控制台应用、动态连接库、OpenGL应用、QT应用、Win32 GUI应用等。Code::Blocks的另一引人之处在于它具有丰富的插件,包括代码格式化、类向导、代码补全、代码统计、To-Do列表,以及WindowsXP外观等各种各样的插件。此外,它不仅支持GNU GCC编译器,还支持MS Visual C++、Borland C++编译器5.5,以及Digital Mars C等多种编译器。
6.Eclipse
Eclipse是目前开源平台中最著名的集成开发环境。最初主要用来支持Java语言编程,目前通过插件CDT也可以用来开发C/C++程序。因为它本身只是一个框架,因此插件众多是它
·4·
第1章 C++预备知识 的一大特点。这使得Eclipse拥有其他支持单一语言的IDE环境很难具有的灵活性。
此外,还有很多IDE也都支持C++开发,例如Visual Slick Edit、NetBeans、Understand C等,读者可以根据自己的需要选择适合自己的开发环境。
1.2.2 Visual C++ 6.0开发环境简介
Visual C++是微软公司推出的目前使用极为广泛的基于Windows平台的可视化集成开发环境。它包含了一个文本编辑器、资源编辑器、工程编译工具、一个增量连接器、源代码浏览器、集成调试工具,以及一套联机文档MSDN。Visual C++ IDE一般由3部分组成:Developer Studio、MFC、Platform SDK。
1.Developer Studio
这是一个集成开发环境,它提供了一个很好的编辑器和很多Wizard。它不仅可以用来开发C、C++,还可以用来开发Visual Basic、VF等语言。使用Developer Studio,可以完成创建、调试、修改应用程序等各种操作。
2.MFC
MFC(Microsoft Foundation Classes,MFC)表示为微软基础类,它的应用程序的总体结构通常由开发人员从MFC类派生的几个类和一个CWinApp类对象(应用程序对象)组成。但是用Visual C++编写代码也并不意味着一定要用MFC,使用STL、ATL、编写SDK程序一样没有限制。
说明:STL是Standard Template Library的缩写,表示标准模板库。ATL是Active Template
Library的缩写,表示活动模板库。 3.Platform SDK
Platform SDK是以Microsoft C/C++编译器为核心,配合MASM,辅以其他一些工具和文档资料。SDK表示Software Development Kit,意为“软件开发工具包”。
Visual C++ 6.0支持的文件类型众多,如表1-1所示。
表1-1 文件类型
文 件 类 型 Active Server Page Bitmap File C/C++ Header File HTML Page Macro File Resource Template Text File 说 明 ASP文件 位图文件 C/C++头文件 HTML文件 宏文件 资源模板 文本文件 文 件 类 型 Binary File C++ Source File Cursor File Icon File Resource Script SQL Script File 说 明 二进制文件 C++源程序文件 光标文件 图标文件 资源脚本文件 SQL语言脚本文件 由于功能强大,Visual C++ 6.0预定义的工程类型也非常多,如表1-2所示。
·5·
第1篇 面向过程的C++编程 表1-2 工程类型
项 目 类 型 ATL COM AppWizard Win32 Dynamic-Link Library Custom AppWizard Makefile MFC AppWizard(dll) Win32 Application Win32 Static Library 说 明 ATL程序 项 目 类 型 Database Project 说 明 数据库 自动嵌入执行文件宏 Internet服务器或过滤器 MFC可执行文件 Win32控制台程序 该工程作为其他子工程的容器,从而减少子工程的联编时间 Win32动态链接库 DevStudio Add-in Wizard 自定义程序向导 Make文件 MFC动态链接库 Win32程序 Win32静态库 ISAPI Extension Wizard MFC ActiveX Control Wizard Active X控件 MFC AppWizard(exe) Win32 Console Application Utility Project 1.2.3 Visual C++ 6.0开发环境的使用
Visual C++提供了一个集源程序编辑、代码编译与调试于一体的开发环境,这个环境称为集成开发环境。通过集成开发环境程序员可以访问C++源代码编辑器、资源编辑器,使用内部调试器,并且可以创建工程文件。本节将详细讲解Visual C++ 6.0集成开发环境各部分的使用方法。
1.主界面
为了使用Visual C++ 6.0开发环境,首先需要单击“开始”“程序”||Microsoft Visual Studio 6.0|Microsoft Visual C++ 6.0命令,打开IDE。主界面如图1-1所示。
菜单条 工具栏 工程管理 面板 工作区 输出窗口 状态栏
图1-1 Visual C++ 6.0 IDE
·6·
第1章 C++预备知识 图中上部为菜单条,菜单条下面为工具栏。屏幕左部为工程管理面板,右部为工作区。工作区下部为输出窗口,再往下是状态栏。各菜单的功能如下所示。
File菜单:包括对文件、项目、工作区及文档进行文件操作的相关命令或子菜单。 Edit菜单:除了常用的剪切、复制、粘贴命令外,还有为调试程序设置的Breakpoints
命令,完成设置、删除、查看断点。此外还有为方便程序员输入源代码的List Members、Type Info等命令。
View菜单:该菜单中的命令主要用来改变窗口和工具栏的显示方式、检查源代码、
激活调试时所用的各个窗口等。
Insert菜单:该菜单包括创建新类、新表单、新资源及新的ATL对象等命令。 Project菜单:该菜单可以创建、修改和存储正在编辑的工程文件。 Build菜单:“Builder”菜单用于编译、创建和执行应用程序。
Tools菜单:该菜单允许用户简单快速地访问多个不同的开发工具,如定制工具栏与
菜单、激活常用的工具(Spy++等)或者更改选项等。
2.创建工程
工程是一个文件。该文件记录了程序中包含的文件和集成环境的配置参数。因此为了编写一个程序,首先就要创建一个工程。选择File|New命令,打开新建工程对话框,如图1-2所示。
图1-2 创建工程
该界面左部由4个选项卡组成。
Files选项卡用来创建单个的文件,如头文件、程序文件、资源文件等。
Project选项卡用来创建工程,图中列出的是Visual C++ 6.0所支持的各种类型的工程。 Workspaces选项卡可以创建一个工作空间,一个工作空间可以包含多个工程。如果
编写的软件系统比较庞大,模块众多,就可以利用工作空间来统一管理。
·7·
第1篇 面向过程的C++编程 Other Documents选项卡可以用来创建一些其他类型的文档,这要取决于操作系统都
安装了什么样的软件。例如,如果安装了Office,这里就会出现Word、Excel等文档。在右部可以输入要创建的工程名称和存放位置。一般默认是create new workspace选项,如果有旧的工作空间,还可以选择加入到该空间内。
技巧:每个工程类型都是一种代码的模板。如果预定义的模板不能满足程序员的要求,可
以选择Custom AppWizard定义特定的模板。 3.工具栏
工具栏是一组直观、快捷的图形化按钮和编辑框,熟练使用工具栏可以大大提高工作效率。Visual C++中包含很多种工具栏,默认为图1-3所示的工具栏。
图1-3 工具栏
一般来讲,工具栏会根据当前工作的不同而不同。例如,调试程序时,会出现调试工具栏;编写数据库程序时,会出现数据库工具栏。如果要添加新的工具栏,只需右击工具栏,然后在弹出的快捷菜单中选中需要的功能,它就会出现在工具栏上。
4.工程管理面板
工程管理面板包括3个选项卡,每个选项卡的功能如下所示。
ClassView选项卡显示工程中使用的类、函数、全局变量等,双击可以跳转到对应的
代码处,如图1-4所示。
ResourceView选项卡显示工程中使用的资源,双击可以编辑该资源,如图1-5所示。 FileView选项卡显示工程中使用的文件。文件按类型管理,双击可以进行编辑,如
图1-6所示。
图1-4 ClassView选项卡 图1-5 ResourceView选项卡 图1-6 FileView选项卡 ·8·
第1章 C++预备知识 5.编译运行
编译是对写好的程序进行检查,如果检查无误就会生成目标代码。生成目标代码后,还需要进行链接才能生成最终的可执行程序,然后才能执行程序。这些操作都要通过Builder菜单来完成。该菜单主要用于编译、创建和执行应用程序,如图1-7所示。
菜单中Compile命令是编译当前文件,对当前文件进行语法检查。Build命令是链接当前工程,生成可执行文件。如果要编译全部文件,就要选择菜单中的Build All命令。当编译好文件后,可以单击Execute命令来执行程序。
图1-7 编译运行
1.2.4 Visual C++ 6.0使用示例
在这一小节将给读者演示一个典型的C++程序的开发过程,该程序用C++语法输出字符串Hello world!。
(1)选择“开始”|“程序”|Microsoft Visual Studio 6.0|Microsoft Visual C++ 6.0命令,启动Visual Studio 6.0集成开发环境,如图1-8所示。
图1-8 Visual Studio 6.0集成开发环境
(2)选择File|New命令,打开New对话框,如图1-9所示。该对话框主要用来选择要创建的工程类型,并选择工程文件的保存位置和工程名称。
·9·
第1篇 面向过程的C++编程
图1-9 工程类型选择
(3)选择Win32 Console Application选项,该选项表示要创建Windows下的32位控制台应用程序。然后在Project name文本框中输入工程名称test,在Location文本框中输入工程保存的位置。最后单击OK按钮,将打开图1-10所示的对话框。
图1-10 选择控制台程序的类型
·10 ·
第1章 C++预备知识 (4)在这个窗口可以选择要创建的控制台程序的类型。如果上个窗口选择的工程类型不同,这里将出现不同的选项。该窗口实际上是选择要使用的模板。
An empty project:表示创建一个空工程,该工程不会自动生成程序文件,仅包含环
境配置文件;
A simple application:表示创建一个简单程序,仅是一个简单的程序框架,不包含任
何有用的代码;
A\"Hello,World!\"application:表示创建一个有一条输出语句的简单程序; An application that supports MFC:表示是带有MFC支持的程序框架。
注意:An application that supports MFC选项只是在程序中加入了MFC的头文件支持,具
体的使用还需要程序手工增加。如果在创建新工程时,选择创建MFC型工程,则系统会自动创建一个MFC的使用框架。
出于演示的需要,这里选择第3种。单击Finish按钮,出现图1-11的对话框。
图1-11 工程摘要
(5)该窗口显示了工程的一个摘要,说明该自动生成的工程都包含哪些文件。单击OK按钮就创建了一个简单的控制台应用程序,如图1-12所示。
该窗口显示了刚才创建的控制台应用程序。左边的工程管理栏内,ClassView选项卡显示了程序的类结构图,FileView选项卡显示了文件结构图。右边就是要编写程序的地方。
(6)选择左边工程管理栏中的FileView页,双击Stdafx.h,打开该文件,如图1-12所示。在右边的代码区内找到stdio.h,将它修改为iostream。
·11·
第1篇 面向过程的C++编程
图1-12 主窗口
说明:stdio.h是C语言的输入输出支持头文件,iostream.h是C++的输入输出头文件。创
建32位控制台应用程序时,Visual Studio 6.0默认使用的I/O头文件是stdio.h,因此需要改成iostream.h。这是将负责输入输出的头文件引入,为了在后面使用cin和cout输入输出流。修改后的stdafx.h文件如下所示。
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but // are changed infrequently
#if !defined(AFX_STDAFX_H__AE3AD910_2C76_44B4_A864_1212C9114CAD__INCLUDED_)
#define AFX_STDAFX_H__AE3AD910_2C76_44B4_A864_1212C9114CAD__INCLUDED_ #if _MSC_VER > 1000 #pragma once
#endif // _MSC_VER > 1000 #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
#include // TODO: reference additional headers your program requires here //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif // !defined(AFX_STDAFX_H__AE3AD910_2C76_44B4_A864_1212C9114CAD__INCLUDED_) (7)经过上述修改后,还需要修改test.cpp文件,该文件是程序的主要实现文件。双击test.cpp文件打开它,如下所示。 ·12 · 第1章 C++预备知识 // test1.cpp : Defines the entry point for the console application. #include \"stdafx.h\" int main(int argc, char* argv[]) { printf(\"Hello World!\\n\"); return 0; } 上述代码是创建新工程时自动生成的,该代码使用一条printf语句输出了字符串Hello world!。printf语句是C语言中的输出语句,C++中的输出语句则使用cout流。因此,需要将代码区中的printf语句修改为如下代码: (8)修改后的test.cpp文件如下所示。 cout<<\"Hello world!\"< (1)选择Builder|Compile命令,编译源程序。如果输出窗口内的输出内容如下所示,则表示没有语法错误,且正确生成了目标代码。 // test1.cpp : Defines the entry point for the console application. #include \"stdafx.h\" int main(int argc, char* argv[]) { cout<<\"Hello world!\"< (2)对该工程进行链接,以生成可执行文件。选择Builder|Build命令,执行链接操作。如果输出如下所示,则表示链接正常,生成可执行文件正常。 该输出说明链接时检测到0个错误,0个警告,生成可执行文件test.exe。 生成可执行文件后就可以执行该程序。执行一个32位控制台程序即可以从Windows的“资源管理器”中双击打开,也可以从命令行手工执行打开。在Visual Studio 6.0中,还可以选择Builder|Execute命令,执行该工程,如图1-13所示。 --------------------Configuration: test - Win32 Debug-------------------- Compiling... Skipping... (no relevant changes detected) test.cpp test.obj - 0 error(s), 0 warning(s) --------------------Configuration: test - Win32 Debug-------------------- test.exe - 0 error(s), 0 warning(s) 图1-13 test.exe的执行结果 ·13· 第1篇 面向过程的C++编程 图中第一行是可执行程序test.exe的输出,第二行则不是。第二行是由Visual Studio 6.0开发环境执行完test.exe程序后输出的,表示“按任意键继续”,即按任何一个键就可返回到开发环境中去。到此为止,本节就完整演示了在Visual Studio 6.0中开发一个典型的C++程序的过程。 1.3 程 序 结 构 程序结构是程序的组织结构,指该程序语言特定的语句结构、语法规则和表达方式,其内容包括代码的组织结构和文件的组织结构两部分。只有严格遵守这种规则,才能编写出高效、易读的程序。否则写出的代码将晦涩难懂,甚至不能被正确编译运行。 1.3.1 第一个程序 在这一节将通过一个简单程序向读者讲解C++程序的基本结构,同时也说明C++程序中输入输出操作的方法,以方便后续章节中的讲解。 【示例1-1】 实现从命令行读入一个整数,然后加1再输出结果。 /*第一部分*/ //这是一个演示程序,它从命令行读入一个整数,然后加1再输出 /*第二部分*/ #include 第1部分是整个文件的注释,指出该文件的作用和版权等信息。 2.第2部分——预处理部分 第2部分是预处理部分,既在编译前要处理的工作。这里是以#include说明的头文件包含代码#include ·14 · 第1章 C++预备知识 注意:在Visual Studio中,有时还会看到#include Studio中鼓励使用的方式。但是采用这种方式时,还需要用“using namespace std;”引入std命名空间;否则系统会提示cin和cout找不到。 3.第3部分——主要部分 第3部分是代码的主要部分,它实现了一个函数,结构如下: int main() { „ return 0; } 其中,花括号包含了实现该函数所需的代码。C++规定每个可执行程序都有且只能有一个名为mian的函数,它表示了程序的入口点。当C++程序执行时,首先执行该函数,然后从该函数内调用其他需要的操作。下面依次分析每行代码的功能。 第1条代码int x表示定义一个对象,并命名为x。末尾的分号表示这条代码到此 结束。 第2条语句使用cout流输出一行文字。其中,cout是一个代表标准输出设备(在这 里指显示器)的对象,它是C++中预定义的系统对象。当程序要向输出设备输出内容时,就需要在程序中使用该对象。输出的操作符用“<<”表示,它表示将操作符右边的内容输出到操作符左边的对象上。代码中操作符左边的内容用双引号包含起来,这表示它是一个字符串。因此,代码“cout<<”输入整数:“;”将在标准输出设备上输出字符串文字“输入整数:”。 第3条语句cin>>x中,cin是一个代表标准输入设备(一般指键盘)的对象,也是 C++中预定义的对象。当程序需要从输入设备接收输入时,就需要在程序中使用该对象。输入的操作符是“>>”,它表示将从操作符左边接收的输入放到右边的对象中。当程序执行到该代码处时,将停止并等待来自标准输入设备的输入。输入完毕后,按下Enter键,cin接收输入并将输入放到相应的对象中,然后跳到下一条代码开始执行。 第4条语句x=x+1中,“+”号表示加法运算,既将加号两边的对象相加。“=”号 表示赋值,它将符号右边的运算结果放到符号左边的对象中。因此,该代码表示将对象x保存的值加1再放回x中。 第5条语句仍然是一条在标准输出设备上输出文字的代码。它包含3个输出操作符, 第1个操作输入了文字x=x+1。第2个操作符输出对象x保存的值。第3个操作符的右边是endl,它表示一个“回车换行”操作。因此,该代码在输出前两个文字后就将光标跳到新的一行上去。 第6条语句return 0是一条跳出程序的代码。它表示从程序跳出并返回到操作系统, 同时带有一个数字0作为返回值。 注意:有些编译器并不要求main函数一定返回值,例如Visual C++。但是,有些编译器 却要求必须有返回值,如开源软件MinGW。 ·15· 第1篇 面向过程的C++编程 1.3.2 文件的组织 当程序较小时,用一个文件就可以保存所有代码。但是有实际用途的程序一般都不会太小。所以,通常会将程序分成几个文件分别保存,再通过包含语句放到一起。这种做法既有利于模块化开发,也有利于代码的重用。 C++的程序的文件类型有.h和.cpp两种,前者是头文件,后者是代码的实现文件。头文件中包含了类、函数、常量、全局变量等的声明,使用时用#include语句在程序的预处理部分包含进来即可。代码的实现文件是对头文件中声明的类、函数等的具体实现。不需要显示包含.cpp文件,当包含了与它对应的.h文件后,编译器会自动去找同名的.cpp文件。 1.4 编 码 规 范 编码规范是指编写代码时应该遵守的文字约束。一个好的编码规范不仅能够明显改善代码的可读性、可管理性,还可以提高程序的可靠性、可修改性、可维护性,以及一致性,从而保证代码的质量。当开发工作需要团队合作时,优秀、统一的编码规范更是合作能否成功的关键。 1.4.1 风格指南 本节给出如下几项建议的代码风格。 程序块采用缩进风格。每个缩进为4个空格位,要用TAB键缩进,而不要混合使用 空格和Tab键。 每个函数不要太长。如果真的需要写很长,就将它拆成多个简单的函数。 避免使用过深的if语句嵌套。这样会增加代码的复杂度,降低可理解性。可以考虑 改成函数来调用。 双目操作符的前后加空格。 单目操作符前后不加空格。 尽量不要写太长的语句。如果实在需要很长,可以考虑分行,更好的办法是拆成多 条语句。 使用类时,每个模块中只放一个类。 功能相对独立的程序块之间或for、if、do、while、switch等语句前后应加一空行。 if、while、for、case、default、do等语句自占一行。 一行不要写多条语句。 当表达式中有多个运算符时,尽量用括号来明确标出优先级。 这里总结了11项指南,实际编程时还有更多的规定。当然这仅是建议,程序员可以根据自己的需要酌情调整。 注意:程序的风格对程序的功能没有影响,编译器会忽略掉程序中的注释。 ·16 · 第1章 C++预备知识 1.4.2 注释的使用 注释是为了增加程序的可读性和美观,给程序提供注解和备忘录。注解不能太多,也不能太少。太多有碍阅读,太少不利于注解代码。C++中的注释有行注释和块注释两种。行注释用“//”,一次注释一行。块注释用“/* */”,星号中间是被注释的块,可以是多行,也可以是单行。 【示例1-2】 演示单行注释的使用方法。 如果用块注释可以这么写: 当需要注释多条语句时,虽然也可以用多条行注释,但是建议使用块注释。 【示例1-3】 块注释的使用举例。 /* 计算x和y的和 函数add接收两个整型参数,返回它们的和 */ int add(int x, int y) { return (x+y); } /*计算x和y的和*/ //计算x和y的和 z=add(x,y); 为了写出规整的注释,需要遵循下述几条规则。 不要滥用注释,只在必要的地方写注释,注释要准确、易懂、简洁。 注释要与被注释的内容一致,只能描述被注释的内容,而不能描述其他。 注释要放在被注释内容的上方,或者被注释语句的后面,以符合阅读习惯。 函数头部应该进行注释,列出函数的功能、可接收的参数、返回值等。 要对.h和.cpp文件进行注释,注释应该列出文件名、作者、功能、版本等。 对重要的语句、代码块、变量和操作等要给予充分明确的注释。 下面再给出对函数add的完整注释。 /* * 函数名称:add * 参 数:接收两个整型参数 * 返回值 :返回整型值 * 函数功能:计算两个整型参数的和并返回其值 * 作 者:XXX * 版本号 :0.0.1 * 修改日期:XXXX.XX.XX */ 注释的内容可以根据需要酌情增减,但是一定要清晰明确,遵循上述几条原则。 ·17· 第1篇 面向过程的C++编程 1.4.3 美化代码 代码不仅是写给编译器看的,也是写给其他同事或同行业的人看的。所以在保证程序正确性的前提性下,一定要注意代码的优雅和整洁。这既显示了程序员良好的素养,也显示了其优秀的编程风格。对代码的美化主要通过规范严谨的缩进和必要的注释。 【示例1-4】 寻找3个数中最大数的代码。 /* * 函数名称:MaxIn3 * 参 数:接收3个整型参数 * 返回值 :无 * 函数功能:找出3个整型数中较大的数 * 作 者:XXX * 版本号 :0.0.1 * 修改日期:XXXX.XX.XX */ void MaxIn3(int x,int y,int z) { int num=0; //存放最大数 //选择最大数 if (x>y) { //x较大 if (x>z) num=x; //x是最大数 else num=z; //z是最大数 } else { //y较大 if (y>z) num=y; //y是最大数 else num=z; //z是最大数 } //返回最大数 return num; } 这里给出了一个例程作为参考,读者可以根据自己的需要删减。通常,IDE都回带有专门的格式化代码的工具,也有专门的第三方工具可供使用。但是这些都只是对代码的缩进进行格式化,至于注释还需要自己合理安排和增加。 技巧:如果希望写出更规范和优美的注释,可以参考开源软件doxygen的格式。该软件提 供了一个内容丰富的风格规范,其更大的好处是可以用该软件将源代码中符合要求的注释导出成文当。 ·18 · 第1章 C++预备知识 1.5 标 识 符 标识符就是为变量、函数、类以及其他用户对象所起的名称。本节主要讲解C++中保留的标识符以及如何定义用户自己的标识符。 1.5.1 保留字 保留字就是系统已经预定义的标识符,不能再用来定义为其他意义,也被称作关键字。C++中常见的保留字主要有表1-3所示的几种。 表1-3 C++中的常见保留字 _asm catch continue else float inline operator class sizeof throw unsigned abstract while default enum for int private register static true using bool char delete explicit friend long protected return switch try virtual break class do extern goto namespace public short template typedef void case const double false if new struct signed this union volatile 保留字是系统预留的符号,这些符号已经被赋予特定的意义。所以程序员只能直接使用它们而不能修改其定义。例如,保留字int和float分别被用来表示整型数据类型和浮点型数据类型,for和while则被用来表示循环语句。 1.5.2 标识符命名 标识符的名称可以是一个字符,也可以是多个字符。第一个字符必须是字母或下划线,后跟字母、数字、下划线的组合。标识符区分大小写。长度不得大于32个字符,而通常是前8个字符有效。例如,a、_a、a12等都是标识符。但是1、1a、?a、&a1等都不是合法的标识符。标识符的命名除了满足字符组合方面的原则外,还要遵循下述原则。 1.一致性 同一个模块内部的标识符命名要一致。例如,如果规定变量的首字母大写,用全部大写表示常量,那么整个模块内都应该这么写。 2.准确性 用词要准确,可以望文生义,避免概念模糊或形式相近的标识符。例如,定义Total表 ·19· 第1篇 面向过程的C++编程 示合计要比随意用一个变量来表示要明确的多。myFun、temp等模糊概念的变量也要避免。 3.长度短,信息多 在保持准确性的前提性,要力争长度短、信息多。既用最短数目的字符数表示尽可能多的信息。例如,用Total表示合计,而不用TotalOfNumbers。 1.6 上 机 实 践 练习使用Visual C++ 6.0开发环境,仿照1.2.4节的步骤,参照1.3.1节上机实现下述程序,并观察其运行情况。 要求:提示使用者从命令行输入3个数,然后按与输入相反的顺序输出。 代码如下所示: #include 为什么提示标识符非法? 解答:在1.5.1节中讲到保留字是系统已经预定义的标识符。因此,不能将用做保留字的文字再用于别的用途;否则编译将无法通过。例如,不能将int、struct、sizeof等再用做其他的用途,它们只能表示表1-3中所规定的意义。表1-3列出的只是常见的几种,C++中的保留字比该表要多,有些保留字也很难记。 幸运的是Visual Studio 6.0提供了语法着色功能,该功能可以对C++预定义的对象进行高亮度显示。因此,如果输入一个标识符后,该标识符被高亮度显示,这就说明它是一个保留字,不能用做其他用途。但是,没有被高亮度显示并不意味着就一定能用做自定义的标识符。例如,不能将iostream用做自定义的标识符。从1.3.1节可知,该文字虽然不是保留字, ·20 · 第1章 C++预备知识 但却是C++中重要的头文件。因此也不能被用做自定义的标识符。 1.8 小 结 本章主要讲述了C++的一些基本知识,以及编程中需要注意的事项。本书的代码都是在Visual C++ 6.0开发环境下完成的,因此着重讲解了Visual C++ 6.0开发环境及其使用,并给出了一个简单的例子。另外,本章对于C++程序的基本结构和编码中应该注意的规范也给出了说明。标识符是编程中必须要用到的,本章也作了一定的说明。第2章将着重讲解C++中基本数据类型的用法。 1.9 习 题 1.C++中.h文件和.cpp文件有什么用处? 2.程序中必须有的函数是什么? 3.C++有几种注释方式,分别表示什么意思? 4.写出5个合法的变量名称。 5.下面的变量名称是否合法?为什么? X,x,_,123,_123,a*,char,123a,a b,1aaa,const,int 6.何为保留字?请举例说明。 ·21· 因篇幅问题不能全部显示,请点此查看更多更全内容