第2章面向过程程序设计概述.ppt
《第2章面向过程程序设计概述.ppt》由会员分享,可在线阅读,更多相关《第2章面向过程程序设计概述.ppt(137页珍藏版)》请在三一办公上搜索。
1、1,C+面向对象程序设计,第2章 面向过程程序设计概述,2,第2章 面向过程程序设计概述,本章学习要点,从C语言到C+的发展历程简单的C+程序C+在面向过程程序设计方面对C语言的扩充C+的输入输出、数据类型、常变量及指针C+的引用、函数、名字空间、字符串变量、复数变量C+程序的编写和实现,3,本章学习目标,了解从C语言到C+的发展历程对简单的C+程序有整体的感性认识掌握C+在面向过程程序设计方面对C的扩充掌握C+的输入输出、数据类型、常变量及指针掌握C+的引用、函数、名字空间、字符串变量、复数变量熟悉C+程序的编写和实现流程,第2章 面向过程程序设计概述,4,2.1 从C语言到C+,C语言到C
2、+的发展历程,C+3.0,C+1.0,带类的C,89年,增加类的多继承,91年,增加模板,增加异常处理、名字空间、运行时类型识别,97年,美国C+标准正式发布,5,下面看几个简单的C+程序,【例2-1】在屏幕上输出一行字符“Welcome to C+!”。#include/包含头文件命令using namespace std;/使用名字空间stdint main()cout“Welcome to C+!endl;/输出字符串到屏幕 return 0;/main函数返回0至操作系统,2.2 简单C+程序,6,【例2-2】通过函数求两个整数a和b中的较大者。#include/包含头文件命令usin
3、g namespace std;/使用名字空间stdint Max(int x,int y)return xy?x:y;/求两数中的大者函数Maxint main()int a,b;/定义两个整型变量a和b coutab;/等待用户从键盘输入数据 coutThe bigger is Max(a,b)endl;return 0;,2.2 简单C+程序,7,#include/包含头文件命令using namespace std;/使用名字空间stdint main()int a,b;/定义两个整型变量a和b coutab;/等待用户从键盘输入数据 int Max(int x,int y);/Max
4、函数原型声明 cout y?x:y;,2.2 简单C+程序,变量可以在程序的任何地方定义,但要在使用前,8,2.2 简单C+程序,【例2-3】声明一个关于人的类Person,人的信息包括姓名、性别、年龄,程序运行后,人可以输入自己的信息,也可以显示自己的信息。,#include/包含头文件命令 using namespace std;/使用名字空间std class Person int main();return 0;,9,2.2 简单C+程序,class Person/类的声明public:/以下为类的公用成员函数void SetInfo()/公用成员函数SetInfo coutnames
5、exage;void Show()/公用成员函数Show cout name:name;cout sex:sex;cout age:ageendl;private:/以下为类的私有数据成员char name20;/私有数据成员namechar sex2;/私有数据成员sexint age;/私有数据成员age;/类声明结束,此处必须有分号,10,2.2 简单C+程序,int main()/main函数 Person person1,person2;/定义Person类的两个对象person1,person2 person1.SetInfo();/对象person1信息输入 person2.Se
6、tInfo();/对象person2信息输入 person1.Show();/对象person1信息输出 person2.Show();/对象person2信息输出 return 0;,11,注意:类的声明和对象的定义的语法形式。类中的成员分为数据成员和成员函数,成员的可见性分为 3种:公用、私有、受保护。类的概念的理解:类是一种用户自定义数据类型,它是不占用实际存储空间的。对象的理解:对象是类类型的变量,系统会为对象分配内存空间。,2.2 简单C+程序,12,2.3 C+对C语言的扩充,在输入输出方面的扩充对数据类型的扩充常变量在指针方面的扩充引用的概念在函数方面的扩充名字空间的概念字符串变
7、量复数变量,本章重点,13,2.3.1 C+的输入输出,C语言输入输出的实现通过输入输出库函数实现C语言的输入输出存在着格式复杂、无法保证安全性、无法对自定义类型整体输入输出等缺点 C+对C输入输出的扩充C+的输入/输出(I/O)流类库“流”的思想cout、cin对象,运算符,14,2.3.2 数据类型的扩展,新增数据类型,功能进行了扩充,15,C+对C语言的结构体、共用体、枚举等自定义数据类型做了扩充。,2.3.2 数据类型的扩展,16,struct Student int num;char name20;char sex;void display()coutnum=numendl;cout
8、name=nameendl;coutsex=sexendl;,2.3.2 数据类型的扩展,17,struct Student private:int num;char name20;char sex;public:void display()coutnum=numendl;coutname=nameendl;coutsex=sexendl;,Student stud1,stud2;,2.3.2 数据类型的扩展,18,在C+中用结构体类型名、共用体类型名、枚举类型名定义变量时,不必在类型名前加上前缀struct、union、enum。,2.3.2 数据类型的扩展,19,struct studen
9、t char ID15;char name20;int age;,union xy int x;char y;enum color black,white,red,student stud;xy x1;color col;,struct student stud;unoin xy x1;enum color col;,C语言,C+,2.3.2 数据类型的扩展,20,2.3.3 用const定义常变量,直接常量和符号常量使用符号常量需要注意的问题:运行时不分配内存单元符号常量没有类型,在编译时不进行类型检查注意替换后的表达式和预想的表达式是否一致,int x=1,y=2;#define PI 3
10、.14159#define R x+y coutPI*R*Rendl;,输出语句输出的并不是 3.14159*(x+y)*(x+y),而是 3.14159*x+y*x+y。,21,2.3.3 用const定义常变量,为了使常量也能像变量那样进行类型检查,C+提供了用const定义常变量的方法定义常变量的语法:const float PI=3.14159;,注意:常变量要在定义的同时进行初始化,可以是具体的数值,也可以是表达式。,22,【例2-4】利用常变量计算圆的面积。#include using namespace std;int main()const float PI=3.14;/定义常
11、变量 float radius=0;coutradius;coutThe area of circle is:PI*radius*radiusendl;return 0;,2.2 简单C+程序,float const PI=3.14;/定义常变量,23,2.3.4 指针,指针指针是一个重要概念,如果使用得当可以使程序高效、简洁、紧凑。如果对指针掌握不牢固,编程则会出现意想不到的错误 指针是内存单元的地址 经常所讲的指针是指针变量的简称,是用来存放指针(地址)的变量。本节重点讨论C+中使用指针需要注意的地方,24,2.3.4.1 指针与0,空指针空指针表示“未分配”或者“尚未指向任何地方”的指针
12、 空指针一般用来判断内存分配是否成功注意:“空指针”与“野指针”的区别在指针上下文中的常数0被编译成空指针 程序员更常使用符号常量NULL来表示空指针,未初始化的指针,25,【例2-5】指针与0。#include using namespace std;int main()int x=100;/定义整型变量x并初始化为100 int*p=0;/定义空指针p/*p=50;/此语句编译出错,不能使用空指针p=,2.2 简单C+程序,int*p=NULL,26,2.3.4.2 指针与const,int*p=NULL,const int*p=NULL,int const*p=NULL,指向const变
13、量的指针,int*const p=NULL,27,2.3.4.2 指针与const,【例2-6】指向const变量的指针。include using namespace std;int main()const int*p=NULL;/定义指向const变量的指针pconst int a=10;/定义常变量ap=,通过本例可以看到可以改变指向const变量的指针的指向,但是不能通过指针修改指针指向单元的内容。,28,2.3.4.2 指针与const,【例2-7】const指针。#include using namespace std;int main()int a=10;/定义普通变量aint
14、b=100;/定义普通变量bint*const p=,通过本例可以看到可以改变const指针指向单元的内容,但是不能改变const指针的指向。,29,2.3.4.2 指针与const,【例2-8】指向const变量的const指针。#include using namespace std;int main()int a=10;int b=100;const int*const p=,对于指向const变量的const指针,既不能改变指针指向单元的内容,也不能改变指针的指向。,30,2.3.4.2 指针与const,小结指针和const的关系比较复杂,const有两个位置,可形成三种指针:,co
15、nst int*p=NULL,int const*p=NULL,指向const变量的指针,int*const p=NULL,31,2.3.4.2 指针与const,小结指针和const的关系比较复杂,const有两个位置,可形成三种指针:,const int*const p=NULL,int const*const p=NULL,指向const变量的const指针:,32,2.3.4.3 void指针,void在作为函数类型和参数类型时为空类型,表示没有返回值或参数。void修饰指针时称为“无类型指针”,表示该指针可以指向任意类型的变量。虽然void指针可以指向任意类型的数据,但是在使用voi
16、d指针时必须对其进行强制类型转换,转换成它所指向单元的实际类型,然后才可以使用。,33,2.3.4.3 void指针,【例2-9】void指针的定义与使用。#include using namespace std;int main()int x=100;void*p=,34,2.3.4.3 void指针,为什么要使用void指针因为void指针可以指向任意类型的数据,所以使用void指针时把void指针所指向的数据给抽象化了,这样可以增加程序的通用性 使用void指针的两个例子,void*memcpy(void*dest,const void*src,size_t len);,void*mal
17、loc(unsigned int size);,35,2.3.4.4 new和delete,C语言的动态内存管理malloc()和free()函数主要缺点函数的返回值是void*类型 分配内存单元时根据参数size的值来分配,无法检查错误分配到的内存单元无法初始化C+中使用new和delete运算符进行动态内存管理,P31 最后,36,【例2-11】使用new和delete动态管理内存单元。#include using namespace std;int main()int*p=NULL;p=new int;cout*p=*pendl;delete p;p=NULL;return 0;,2.3
18、.4.4 new和delete,37,申请内存空间并进行初始化 指针变量=new 数据类型(初值);分配多个连续变量的存储空间 使用new 和delete 指针变量=new 数据类型元素个数;delete 指针变量;,三种动态内存管理的方式:兼容C语言的malloc/free方式,单个变量的new/delete方式,多个变量的new/delete 方式,2.3.4.4 new和delete,38,2.3.5 引用,引用就是某一变量的别名,对引用的操作与对变量直接操作完全一样 引用的声明方式 类型标识符,39,2.3.5 引用,int a;int,在声明一个引用时,引用前面的类型标示符是指目标变
19、量的类型,且必须同时使之初始化,即声明它代表哪一个变量.,40,【例2-12】使用引用访问变量。#include using namespace std;int main()int x=100;/定义整型变量x int,程序运行结果如下:rx=100 x=200,2.3.5 引用,41,补充:关于引用的简单说明,(1)引用并不是一种独立的数据类型,声明引用时必须指定其代表某一类型的实体(如变量、类对象),即对它初始化。,int a;int,42,(2)引用与其所代表的变量共享同一内存单元,系统并不为引用另外分配存储空间。,int a=3;int,补充:关于引用的简单说明,43,int a=3;
20、int/声明c是整型引用b的别名,(3)对引用的初始化,可以用一个变量名,也可以用另一个引用。如:,补充:关于引用的简单说明,44,(4)引用在初始化后不能再被重新声明为另一变量的别名。,int a=3,b=4;int/企图重新声明c为整型变量b的别名,补充:关于引用的简单说明,45,(5)当&a的前面有类型符时(如 int&a),它必然是对引用的声明;如果前面没有类型符时(p=&a),此时的&是取地址运算符。,int a=3,b=4;int,补充:关于引用的简单说明,46,实际上,在C+程序中很少使用独立变量的引用,如果要使用某一个变量,就直接使用它的原名,没有必要故意使用它的别名。前面举的
21、例子只是为了说明引用的特征和基本的用法。C+之所以增加“引用”,主要是利用它作为函数参数,以扩充函数传递数据的功能,补充:关于引用的简单说明,47,在C语言中,函数的参数传递有以下两种情况:,(1)值传递:,将变量名作为形参和实参。,此时传递给形参的是实参变量的值,数据传递是单向的,在函数执行期间形参值发生变化并不回传给实参。,(2)地址传递:,48,(2)地址传递:,形参是指针变量,实参是变量的地址。函数调用时,形参指向实参变量单元,数据传递是双向的。,49,【例2-13】编写一个函数,交换两个整型变量的值。,(1)值传递:,教材39,50,(2)地址传递:传递变量的地址(指针),【例2-1
22、3】编写一个函数,交换两个整型变量的值。,51,(3)引用传递:,【例2-13】编写一个函数,交换两个整型变量的值。,52,#include using namespace std;void Change(int,2.3.5 引用,53,对引用的进一步说明,(1)不能建立数组的引用。“引用”只能是变量或对象的引用。数组是具有某种类型的数据的集合,其名字表示该数组的起始地址而不是一个变量。所以不能建立数组的引用。char c6=“hello”;char,54,(3)可以将变量的引用的地址赋给一个指针,此时指针指向的是原来的变量,如 int a=3;int,对引用的进一步说明,55,(4)可以建立
23、指针变量的引用,如 int i=3;int*p=,对引用的进一步说明,56,(5)可以用const对引用加以限定,不允许改变该引用的值。如 int i=5;const int,但可以 i=3,对引用的进一步说明,57,利用常引用作为函数形参,既能提高程序的执行效率,又能保护传递给函数的数据不在函数中被改变,达到保护实参的目的,对引用的进一步说明,void show(const int,58,(6)可以用常量或表达式对引用进行初始化,但此时必须用const作声明。如 int a=3;const int,int temp=a+3;const int,用这种方式不仅可以用表达式对引用进行初始化,还可
24、以用不同类型的变量对之初始化。,对引用的进一步说明,59,double d=3.14159;const int,int temp=d;const int,对引用的进一步说明,60,引用作为函数的返回值,【例2-14】引用作为函数的返回值。#include using namespace std;int,2.3.5 引用,61,引用作为函数的返回值,【例2-14】引用作为函数的返回值。int main()int a=2,b=3;cout a=a b=b endl;Max(a,b)=4;/*由于函数的返回值为引用,所以可以为函数赋值,为函数赋的值实际赋给了两个参数中的大者,所以a的值为2,b的值为
25、4*/cout a=a b=b endl;return 0;,2.3.5 引用,62,引用作为函数的返回值,引用作为函数的返回值的补充示例。class stringpublic:string,2.3.5 引用,63,指针与引用的区别:(1)从内存分配上看:指针变量需要分配内存区域,而引用不需要分配内存区域。(2)指针可以有多级,但是引用只能是一级(int*p;合法 而 int&a是不合法的);(3)指针的值可以为NULL,但是引用的值不能为NULL,并且引用在定义的时候必须初始化;(4)指针的值在初始化后可以改变,即指向其它的存储单元,而引用在进行初始化后就不能再改变了;(5)指针和引用的自增
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 过程 程序设计 概述
链接地址:https://www.31ppt.com/p-5898327.html