2.15k likes | 2.35k Views
C++ 面向对象程序设计 第二章. 本章导读. C++ 语言是在 C 语言的基础上发展而来的,它比 C 语言更容易被人们学习和掌握。 C++ 语言对 C 语言的扩充,主要是引进了面向对象机制,包括类、对象、派生类、继承、多态等概念和新的语言机制,从而使 C++ 成为一种面向对象的程序设计语言。 应该说明的是 C++ 语言并没有完全抛弃 C 语言的成份, C++ 的面向对象和面向过程的双重特性是区别于其它面向对象语言的一个显著标志。. 本章要点. C++ 的特点 C++ 程序的基本结构 C++ 和 C 语言的区别. 第 2 章 目录.
E N D
C++面向对象程序设计 第二章
本章导读 • C++语言是在C语言的基础上发展而来的,它比C语言更容易被人们学习和掌握。 • C++语言对C语言的扩充,主要是引进了面向对象机制,包括类、对象、派生类、继承、多态等概念和新的语言机制,从而使C++成为一种面向对象的程序设计语言。 • 应该说明的是C++语言并没有完全抛弃C语言的成份,C++的面向对象和面向过程的双重特性是区别于其它面向对象语言的一个显著标志。
本章要点 • C++的特点 • C++程序的基本结构 • C++和C语言的区别
第2章 目录 • 2.1 C++语言的产生和发展 • 2.2 C++程序的结构及编程环境 • 2.3 C++的数据类型 • 2.4 运算符、表达式和基本语句 • 2.5 函数 • 2.6 作用域和引用 • 2.7 程序举例 • 2.8本章小结 • 习题二
2.1 C++语言的产生和发展 • 2.1.1 C++的产生 • 2.1.2 C++的特点
2.1.1 C++的产生 • C++程序设计语言由C语言发展而来。C语言产生以后,最早在UNIX操作系统上使用,并且迅速被人们接受并得到了广泛的应用。到了80年代C语言已经风靡全球,成为一种应用最为广泛的程序设计语言。 • 但C语言在盛行的时候也显现出了自己的局限性,突出表现在以下几个方面:
(1)C语言类型检查机制较弱,这使得程序中的一些错误不能在编译时被发现。(1)C语言类型检查机制较弱,这使得程序中的一些错误不能在编译时被发现。 • (2)C语言本身几乎没有支持代码的重用机制,这使得各个程序的代码很难为其他程序所用。 • (3)C语言不适合开发大型的程序,当程序达到一定的规模时,程序员很难控制程序的复杂性。
为了避免C语言以上的这些不足之处,1980年贝尔实验室的Bjarne Stroustrup博士开始对C语言进行改编。 • 虚函数(virtual function)、运算符重载(operator overloading)、多重继承(multiple inheritance)、模板(template)、异常(exception)、RTTI、名字空间(name space)逐渐被加入标准,1983年正式命名新的语言为C++语言。 • 1998年国际标准组织(ISO)颁布了C++程序设计语言的国际标准ISO/IEC 14882-1998。 • C++是具有国际标准的编程语言,通常称作ANSI/ISO C++。 • C++继承了C的原有精髓,增加了对开发大型软件非常有效的面向对象机制,并且弥补了C语言不支持代码重用的不足,成为一种既可表现过程模型,又可表现对象模型的优秀的程序设计语言之一。目前C++仍在不断的发展当中。
2.1.2 C++的特点 • (1)兼容C语言。这主要表现在大部分C程序不需修改即可在C++的编译环境下运行,用C语言编写的许多库函数和应用软件都可用于C++。 • (2)用C++编写的程序可读性更好,代码结构更合理,可直接地在程序中映射问题空间的结构。 • (3)生成的代码质量高,运行效率仅比汇编语言代码段慢10%~20%。 • (4)从开发时间、费用到形成的软件的可重用性、可扩充性、可维护性和可靠性等方面有了很大的提高,使得大中型的程序开发项目变得容易得多。 • (5)C++是面向对象的程序设计语言,可方便地构造出模拟现实问题的实体和操作。
2.2 C++程序的结构及编程环境 • 2.2.1 C++程序基本格式 • 2.2.2 C++程序的结构 • 2.2.3 C++程序的编程环境
2.2.1 C++程序基本格式 • 让我们通过程序2.1的学习,对C++程序的格式有一个初步的认识。 • 【例2.1】 • #include<iostream> • using namespace std; • int max(int x,int y);
void main()//主函数 • { • int a,b,fmax; //定义三个整型变量 • cout<<"Please input two numbers:\n";//提示用户输入两个数 • cin>>a>>b;//从键盘输入变量a和b的值 • fmax=max(a,b);//调用函数max,将得到的值赋给变量fmax • cout<<"The larger number:"<<fmax<<endl;//输出两个数中较大者 • }
int max(int x,int y)//定义max函数 • { • if(x>y) • return x; • else • return y; • }
由上面程序可以看出C++程序有以下几个基本组成部分:由上面程序可以看出C++程序有以下几个基本组成部分: • 1.预处理命令 • 2.输入和输出 • 3.函数 • 4.注释
2.2.2 C++程序的结构 • 一个面向对象的C++程序一般由类的声明和类的使用两大部分组成。 • 类的使用部分一般由主函数及有关子函数组成。 • 其结构大致如下:
#include<iostream> • //类的声明部分 • class A{ • int x,y,z;//类A的数据成员的声名 • … • fun(){…}//类A的成员函数的定义和声明 • … • }; • //类的使用部分 • int main(){ • A a;//创建一个类A的对象a • … • fun();//调用成员函数fun() • return 0; • }
在应用程序中,我们常常把类的成员函数的定义与声明分开。在应用程序中,我们常常把类的成员函数的定义与声明分开。 • 分开后的定义和声明还可以写在两个文件中,使用时只要用# include包含即可,所以我们说C++程序是多文件结构。
2.2.3 C++程序的编程环境 • 在DOS下,C++程序的编辑、编译和运行方法和过程与C语言基本一样,特别是常用的C++版本,如Turbo C++或Borland C++都带有C和C++两种编译器。 • 在Windows下,我们常用Visual C++开发环境,来编辑、编译和运行C++程序,随着.NET的出现,有时也用Microsoft Visual Studio 2005或Microsoft Visual Studio 2008来编辑、编译和运行C++程序。
2.3 C++的数据类型 • 2.3.1 关键字和标识符 • 2.3.2 C++的基本数据类型 • 2.3.3 常量 • 2.3.4 变量 • 2.3.5 数组 • 2.3.6 结构体 • 2.3.7联合体 • 2.3.8 枚举类型 • 2.3.9 用typedef类型 • 2.3.10数据类型转换
基本数据类型(是系统预先定义的,并被 内设在语言中的数据类型 ) • 派生类型(派生类型是从基本类型派生出 来的新类型,它是一种更高级的抽象) • 类类型(类类型是通过组合现存类型而生 成的新类型)
2.3.1 关键字和标识符 • 在C++语言中,关键字(keyword)又称为保留字,它是系统预先定义的、具有特定含义的标识符,因此不允许用户重新定义,即不能作为新的标识符出现在程序中,例如:例2.1中的“cin”、“cout”和“return”等等。
标识符是由若干个字符组成的字符序列,用来命名程序中的一些实体。通常用于常量名、变量名、函数名、类名、结构名、联合名、对象名、类型名和标号名等。标识符是由若干个字符组成的字符序列,用来命名程序中的一些实体。通常用于常量名、变量名、函数名、类名、结构名、联合名、对象名、类型名和标号名等。 • 在程序中用户是通过标识符来定义和引用这些对象的。C++语言中构成标识符的语法规则如下:
(1)标识符由字母(a~z,A~Z)、数字(0~9)或下划线(_)组成;(1)标识符由字母(a~z,A~Z)、数字(0~9)或下划线(_)组成; • (2)第一个字符必须是字母或下划线。例如,Example,My_Birthday,Message,是合法的标识符;5key,5-A是非法的标识符; • (3)VC++中标识符最多由247个字符组成; • (4)C++大小写字母被认为是两个不同的标识符。例如,book和Book被认为是两个不同的标识符; • (5)关键字不能作为新的标识符在程序中使用,但标识符中可以包含关键字。例如,intx,myclass 是合法的标识符。
下面列出了C++语言中的标点符号: • ,逗号,用做数据之间的分隔符; • ;分号,语句结束符; • :冒号,语句标号结束符或条件运算符 • '单引号,字符常量标记符 • "双引号,字符串常量标记符 • {左花括号,复合语句开始标记符 • }右花括号,复合语句结束标记符
2.3.2 C++的基本数据类型 • 整数类型(int) /用于定义整数对象。 • 字符类型(char) /字符类型用于定义字符数据。 • 浮点类型(float,double)/浮点类型用于定义实数。 • 空类型(void)/void类型主要用于声明没有返回值的函数,以及声明未确定类型或指向任意数据类型的指针。
数据类型决定了数据所占存储空间的大小及值域范围,这些是与机器有关的。数据类型决定了数据所占存储空间的大小及值域范围,这些是与机器有关的。 • 表2-1(见课本p14)列出的是在32位编译器中的基本数据类型所占空间的大小和值域范围。
2.3.3 常量 • 特点 • 分类
常量特点 • 常量是指在程序运行的整个过程中始终保持不变的量。 • 在表达式中常量是明确表示出的值。 • 常量不同于变量,主要表现在以下两个方面: • 第一,常量不在内存中占有编译空间; • 第二,常量的值不能修改。
常量分类 • 整型常量 • 字符常量 • 逻辑常量 • 枚举常量 • 实型常量 • 地址常量 • 字符串常量
(一) 整型常量 • 整型常量简称整数 • 它有十进制、八进制和十六进制三种表示。 • 在整数末尾使用u和l字母
1. 十进制整数 • 当一个十进制整数大于等于-2147483648即-231-1,同时小于等于2147483647即231-1时,则被系统看作是int型常量;当在21474836484294967295即232-1范围之内时,则被看作是unsigned int型常量;当超过上述两个范围时,则无法用C++整数类型表示,只有把它用实数(即带小数点的数)表示才能够被有效地存储和处理。
2. 八进制整数 • 当一个八进制整数大于等于0同时小于等于017777777777时,则称为int型常量,当大于等于020000000000同时小于等于037777777777时,则称为unsigned int型常量,超过上述两个范围的八进制整数则不要使用,因为没有相对应的C++整数类型。
3. 十六进制整数 • 当一个十六进制整数大于等于0同时小于等于0x7FFFFFFF时,则称为int型常量,当大于等于0x80000000同时小于等于0xFFFFFFFF时,则称为unsigned int型常量,超过上述两个范围的十六进制整数没有相对应的C++整数类型,所以不能使用它们。
4. 在整数末尾使用u和l字母 • 对于任一种进制的整数,若后缀有字母u(大、小写等效),则硬性规定它为一个无符号整型(unsigned int)数,若后缀有字母l(大、小写等效),则硬性规定它为一个长整型(long int)数。 • 在一个整数的末尾,可以同时使用u和l,并且对排列无要求。如25U,0327UL,0x3ffbL,648LU等都是整数,其类型依次为unsigned int,unsigned long int,long int和unsigned long int。
(二) 字符常量 • 字符常量简称字符,它以单引号作为起止标记,中间为一个或若干个字符。 • 如’a’,’%’,’\n’,’\012’,’\125’,’\x4F’等都是合乎规定的字符常量。 • 每个字符常量只表示一个字符,当字符常量的一对单引号内多于一个字符时,则将按规定解释为一个字符。 • 如’a’表示字符a,’\125’解释为字符U。
每个ASCII字符均是一个字符型数据,即字符型中的一个值。每个ASCII字符均是一个字符型数据,即字符型中的一个值。 • “转义”字符的概念,其含义是:以反斜线作引导的下一个字符失去了原来的含义,而转义为具有某种控制功能的字符。如’\n’中的字符n通过前面使用的反斜线转义后就成为一个换行符,其ASCII码为10。
(三) 逻辑常量 • 逻辑常量是逻辑类型中的值,VC++用保留字bool表示逻辑类型,该类型只含有两个值,即整数0和1,用0表示逻辑假,用1表示逻辑真。 • 在VC++中还定义了这两个逻辑值所对应的符号常量false和true,false的值为0,表示逻辑假,true的值为1,表示逻辑真。
(四) 枚举常量 • 枚举常量是枚举类型中的值,即枚举值。 • 枚举类型是一种用户定义的类型,只有用户在程序中定义它后才能被使用。 • 用户通常利用枚举类型定义程序中需要使用的一组相关的符号常量。 • 枚举类型的定义格式为: • enum <枚举类型名> {<枚举表>};
它是一条枚举类型定义语句,该语句以enum保留字开始,接着为枚举类型名,它是用户命名的一个标识符,以后就直接使用它表示该类型,枚举类型名后为该类型的定义体,它是由一对花括号和其中的枚举表所组成,枚举表为一组用逗号分开的由用户命名的符号常量,每个符号常量又称为枚举常量或枚举值。如:它是一条枚举类型定义语句,该语句以enum保留字开始,接着为枚举类型名,它是用户命名的一个标识符,以后就直接使用它表示该类型,枚举类型名后为该类型的定义体,它是由一对花括号和其中的枚举表所组成,枚举表为一组用逗号分开的由用户命名的符号常量,每个符号常量又称为枚举常量或枚举值。如:
(1)enum color{red, yellow, blue}; • (2)enum day{Sun, Mon, Tues, Wed, Thur, Fri, Sat}; • 第一条语句定义了一个枚举类型color,用来表示颜色,它包含三个枚举值red,yellow和blue,分别代表红色、黄色和兰色。 • 第二条语句定义了一个枚举类型day,用来表示日期,它包含7个枚举值,分别表示星期日、星期一至星期六。
一种枚举类型被定义后,可以象整型等预定义类型一样使用在允许出现数据类型的任何地方。如可以利用它定义变量。一种枚举类型被定义后,可以象整型等预定义类型一样使用在允许出现数据类型的任何地方。如可以利用它定义变量。 • (1)enum color c1, c2,c3; • (2)enum day today, workday; • (3)c1=red; • (4)workday=Wed;
(五) 实型常量 • 简称实数,有十进制的定点和浮点两种表示方法。 • 1.定点表示 • 定点表示的实数简称定点数,它是由一个符号(正号可以省略)后接若干个十进制数字和一个小数点所组成,这个小数点可以处在任何一个数字位之前或之后。如.12, 1.2, 12., 0.12, -12.40, +3.14, -.02037, -36.0等都是符合书写规定的定点数。
2.浮点表示 • 浮点表示的实数简称浮点数,它是由一个十进制整数或定点数后接一个字母e(大、小均可)和一个1至3位的十进制整数所组成,字母e之前的部分称为该浮点数的尾数,之后的部分成为该浮点数的指数,该浮点数的值就是它的尾数乘以10的指数幂。 • 如3.23E5, +3.25e-8, 2E4, 0.376E-15,1e-6, -6.04E+12, .43E0, 96.e24等都是合乎规定的浮点数,它们对应的数值分别为:3.25*105, 3.25*10-8, 20000, 0.376*10-15, 10-6, -6.04*1012, 0.43, 96*1024等。
(六) 地址常量 • 指针类型的值域是0232-1之间的所有整数,每一个整数代表内存空间中一个对应单元(若存在的话)的存储地址,每一个整数地址都不允许用户直接使用来访问内存,以防止用户对内存系统数据的有意或无意的破坏。 • 但用户可以直接使用整数0作为地址常量,它是C++中唯一允许使用的地址常量,并称为空地址常量,它对应的符号常量为NULL,表示不代表任何地址,在iostream等头文件中有此常量的定义。
(七)字符串常量 • 字符串常量简称字符串,是由一对双引号括起来的零个或多个字符序列。 • 例如: • “This is a C++ Program.\n” //字符串常量 • “\td” //字符串常量 • “2002\12\22” //字符串常量 • 字符串中可以包含空格符、转义字符或其他字符。
字符串常量不同于字符常量,两者是有区别的,主要表现在以下几个方面:字符串常量不同于字符常量,两者是有区别的,主要表现在以下几个方面: • (1)字符常量的标识符是单引号,字符串常量的标识符是双引号; • (2)存储方式不同; 例如: • " Program" //字符串常量 • "m" //字符串常量 • 'm' //字符常量
(3)字符串常量和字符常量所能进行的运算是不同的。(3)字符串常量和字符常量所能进行的运算是不同的。 • 例如:"m"+"n" 和 'm'+'n' 运算的结果是不同的。
2.3.4 变量 • (一) 变量定义语句 • (二) 语句格式举例 • (三) 语句执行过程 • (四) 语句应用举例 • (五) 符号常量定义语句 • (六) 使用#define命令定义符号常量 • (七) 使用变量和常量的程序举例
(一) 变量定义语句 • 变量定义是通过变量定义语句实现的,该语句的一般格式为: • <类型关键字> <变量名>[=<初值表达式>],…;
<类型关键字>为已存在的一种数据类型,如short, int, long, char, bool, float, double等都是类型关键字,分别代表系统预定义的短整型、整型、长整型、字符型、逻辑型(又称布尔型)、单精度型和双精度型。 • 对于用户自定义的类型,可从类型关键字中省略其保留字。如假定struct worker是用户自定义的一种结构类型,则前面的保留字struct可以省略。