☑大家网 lopSage.com 第1章 C++基础知识 1.1C+的发展历程 C+是既适合于作为系统描述语言,也适合于编写应用软件的既面向对象又面向过 程的一种混合型程序设计语言,它是在C语言的基础之上发展起来的。 在C语言推出之前,操作系统等系统软件主要是用汇编语言编写的(如著名的UNX 操作系统)。由于汇编语言依赖于计算机硬件,因此程序的可移植性和可读性就比较差 为了提高程序的可读性和可移植性,最好能采用高级语言来编写这些系统软件。然而, 般的高级语言难以实现汇编语言的某些功能(如汇编语言可以直接对硬件进行操作,对内 存地址进行操作和位操作等)。人们设想有一种能集一般高级语言和低级语言特性于 身的语言。于是,C语言便应运而生了。 最初的C语言只是为描述和实现UNIX操作系统而提供的一种程序设计语言。 1973年,贝尔实验室的K.Thompson和D.M.Ritchie两人合作把UNIX的90%以上的 代码用C语言改写(即UNIX第5版)。后来C语言又作了多次改进,1978年以后,C语 言已先后移植到大、中、小及微型计算机上,现在C语言已成为风靡全球的计算机程序设 计语言。 到了20世纪80年代,美国AT&T贝尔实验室的Bjarne Stroustrup在C语言的基 础上推出了C+程序设计语言。由于C+提出了把数据和在数据之上的操作封装在 起的类、对象和方法的机制,并通过派生、继承、重载和多态性等特征,实现了人们期待已 久的软件重用和程序自动生成。这使得软件,特别是大型复杂软件的构造和维护变得更 加有效和容易,并使软件开发能更自然地反映事物的本质,从而大大提高了软件的开发效 率和质量。 C+越来越受到重视并得到广泛的应用,许多软件公司都为C+设计编译系统。如 AT&T,Apple,Sun,Borland和Microsoft等,其中国内最为流行的应当是Microsoft公 司的Visual C+。与此同时,许多大学和公司也在为C+编写各种不同的类库 Microsoft公司的MFC(Microsoft Foundation Class Library)就是比较优秀的代表,在国 内外得到较为广泛的应用。 www.TopSage.com
www.TopSage.com
·4· 第1篇Visual C+基础知识 1.2一个简单的C+程序 下面是一个用C+编写的例子,其功能是在屏幕上显示“Welcome!”,其程序代码 如下: #include <iostream.h /包含头文件 void main() /main函数,程序人口 /程序体开始 char str_greet]Welcome!; 定义 个数组并初始化 coutstr_greetendl; /在屏幕上输出字符串内容并换行 1/程序体结束 熟悉C语言的读者不难看出,用C+编写的程序和用C编写的程序在程序结构上基 本是相同的,都是以main函数作为程序的入口,两者都是以一对{)把函数中的语句括起 来,两者都是以分号作为语句的结束标志。但是,两者也有一些不同之处,C+中是以 iostream.h文件作为标准输入输出头文件,C是以stdio.h作为标准输入输出头文件; C+中采用符号“《”作为标准输出,而不是通过printf函数来实现。 通过上面的例子,可以看出,C+语言和C语言两者之间既有紧密的联系,又各有自 己的特点。下面的内容将介绍C+程序设计中的一些基础知识,这部分内容,C+和C 有很多是一致的。由于本书是面向已经熟悉C语言并初步掌握C+语言的读者,因此, 对C+的内容,只是作一个简单的总结性概述,如果读者对C及C+语言很熟悉的话,可 以跳过这部分内容的学习。 1.3数据类型 在C+中,任何数据在使用之前都要进行数据类型的定义,然后才能使用。 1.3.1C+的基本数据类型 基本数据类型是语言预定义的抽象。在C+中,每种基本数据类型都使用一个关键 字来表示。C+的基本数据类型描述了机器硬件所支持的对象和可以对这些对象执行的 操作。C+的基本数据类型分为三大类,即整型、浮点型和无值型(void)型。表1-1是 C+所提供的基本数据类型及其值的范围。 在基于Windows(包括Windows95/98/XP,Windows NT/2000)的程序设计中, Windows定义并使用了许多非单一的数据类型,这些数据类型既简单又复杂,同一数据 类型常常有一个以上的名字。这样设计的目的是为了帮助程序员编写更易读的代码,并 通过不使用特定硬件的数据类型以促进跨平台、跨处理机的目的。例如,为了实现可移植 性,在Windows中常使用数据类型的别名来代替具体的数据类型,如使用UINT来代替 无符号整数型定义unsigned int等。 www.TopSage.com
www.TopSage.com
第1章C+基础知识 ·5 表1-1C+所提供的各种基本数据类型及其值的范固 类型 说明 一进制位 值域 char 字符型 8 -128-127 signed char 有符号字符型 -128127 unsigned char 无符号字符型 0255 int 整型 16 -3276832767 signed int 有符号整型 16 -32768~32767 unsigned int 无符号整型 16 0-65535 short int 短整型 16 -3276832767 signed short int 有符号短整型 16 -3276832767 unsigned short int 无符号短整型 16 0✉65535 long int 长整型 -20一(20-1) signed long int 有符号长整型 32 一21(21-1) unsigned ongin 无符号长整型 32 0(22-1) float 浮点型 32 7位有效位 double 双精度型 64 15位有效位 long double 长双精度型 80 19位有效位 1.3.2复合数据类型 C+中还提供了几种复合数据类型,这些复合数据类型包括数组,结构体、共用体、枚 举、类和用户自定义类型。 1.数组 数组是具有统一数据类型的对象的集合。每一个单独的对象没有名字,但是它们可 以通过其在数据中的位置来确定。例如:下面的语句定义了一个名为Aray的数组,该 数组共有10个元素。程序中通过数据元素在数组中的索引值来访问数组元素。 int i,Array[10: /定义数组,值得注意的是,在数组中元素的下标是从0开始 Arr8y[2]=30: /为数组元素赋值 i=Array[2]1 /读取数组元素中的值,把它赋给变量 在C+中不仅可以定义一维数组,还可以定义多维数组。多维数组中的每一维的范 围大小都用一个方括号括起来。例如:下面的语句定义了一个二维数组,该数组的第一 维共有10个元素,第二维共有20个元素。 int Array[10][20] 在一个二维数组中第一个下标称为行下标,第二个下标称为列下标,上面定义的数组 Array相当于一个具有10行20列的矩阵。 数组在定义时,系统将自动为它分配一块连续的内存空间。此时,数组名指向这块空 间的起始地址,并且在程序中不可改变。也就是说,一个数组名相当于一个地址常量。 www.TopSage.com
www.TopSage.com
·6· 第1篇Visual C+基瑞知识 大网 2.结构体 .com 在程序设计中,有时需要将某些相关的具有不同类型的数据组织到一个数据类型中。 为此,C+中提供了这样一种复合数据类型,它被称为结构体。定义一个结构体类型的 般形式为: struct结构体名 成员表列: 例如,下面的语句中定义了一个有关学生的名为student的结构体,它包括学生的学 号、姓名、性别和年龄等不同数据类型的信息。 int StuNo; 1/学生学号 char StuName[20]: //学生姓名 char Sex /学生性别 int Age //学牛年龄 上面定义了一个结构体类型,struct student(其中struct是关键字,不能省略)表示这 是一个“结构体类型”。它包括StuNo,.StuName,Sex和Age等不同数据类型的数据项, 这些数据项均称为结构体的成员。应当注意:struct student是程序设计者自己定义的类 型名。它和系统已定义的标准类型(如int,char,float和double等)一样可以用来作为定 义变量的类型 定义了结构体类型后,还必须定义该结构体类型的变量,才能使用该结构体。定义结 构体变量的方法有以下三种: (1)先定义结构体类型再定义变量名 例如,上面已定义一个结构体类型struct student,.可以用它来定义结构体student的 两个变量stu1,stu2. struct student stul,stu 变量stul、stu2为struct student类型变量,即它们具有struct student类型的结构。 (2)在定义卷型的同时定义变量 例如,下面的语句在定义结构体类型student的同时定义了stul,stu2两个变量。 struct student int StuNo char StuName[20] char Sex; int Age: }stul,stu2; www.TopSage.com
www.TopSage.com
第1章C+基础知识 ·7· (3)直接定义结构体变量 例如,下面的语句中直接定义了两个结构体变量stu1和stu2但没有出现结构体类 型名。 struct //此处省略了结构体名 int StuNot char StuName[20] char Sexi int Age: )stul,stu2; 值得提出的是,结构体成员可以嵌套,即结构体的成员可以是另一个结构体 3。共用体 在程序设计中,有时需要使几种不同类型的变量存放在同一内存单元中。这种使几 种不同的数据类型的变量共占同一段内存的结构,称为“共用体”(有时也称“联合体”)类 型的结构。“共用体”类型变量的定义形式为: union共用体名 成员列表: 变量列表 例如,下面的语句中定义一个名为data的共用体,并定义了i和ch两个data共用体 的成员及u1和2两个共用体变量。 union data int is char chi ul,2 可以看出,共用体和结构体的定义相似。但它们的含义是不同的,二者的主要区别在 于:结构体变量所占内存长度是各成员占的内存长度之和,每个成员分别占有其自己的 内存单元。共用体变量所占的内存长度等于最长的成员的长度。 4枚举 如果一个变量只有几种可能的值,可以定义为枚举类型。所谓枚举是指将变量的值 一列举出来,变量的值只限于在列举出来的值的范围内。 定义枚举类型由关键字enum开始。例如,下面的语句定义一个名为color的枚举类 型,并定义了一个枚举类型的变量My_color。 enum color (Red,Green,Blue,Yellow); enum color My_color; 定义的My-color是枚举变量,它的值只能是Red到Yellow之一。例如,下面的语 www.TopSage.com
www.TopSage.com