收藏 分享(赏)

C++面向对象程序设计--001.ppt

上传人:dzzj200808 文档编号:3655391 上传时间:2018-11-15 格式:PPT 页数:92 大小:364.50KB
下载 相关 举报
C++面向对象程序设计--001.ppt_第1页
第1页 / 共92页
C++面向对象程序设计--001.ppt_第2页
第2页 / 共92页
C++面向对象程序设计--001.ppt_第3页
第3页 / 共92页
C++面向对象程序设计--001.ppt_第4页
第4页 / 共92页
C++面向对象程序设计--001.ppt_第5页
第5页 / 共92页
点击查看更多>>
资源描述

1、C+面向对象程序设计,主讲:朱红斌 丽水学院计算机与信息工程学院 联系方式:13957071060 661060 办公地点:东区计算机实验大楼(15)104室,第一章 C+的初步知识,1.1 从C到C+ 1.2 最简单的C+程序 1.3 C+对C的扩充 1.4 C+程序的编写和实现 1.5 关于C+上机实践,1.1 从C到C+,C语言是结构化和模块化的语言,C程序的设计者必须细致地设计程序中的每个细节,准确地考虑程序运行时每一时刻发生的事情,当程序规模变大时,结构化程序设计就显得力不从心。为了解决软件设计危机,在20世纪80年代提出了面向对象的程序设计思想(OOP)在实践中人们发现C语言使用如

2、此广泛,如果在它的基础上发展一种面向对象的语言,一定会让大众容易接收这种语言,所以产生了C+。,AT&T发布的第一个C+编译系统是一个预编译器,它把C+代码转换成C代码,然后再用C编译系统生成目标代码。 1988 产生第一个C+编译系统 1989 C+2.0 类的多重继承 1991 C+3.0 类的模板C+4.0 异常处理、命名空间 1997 ANSI发布C+标准,C+既可以用于面向过程的结构化程序设计,也可用于面向对象的程序设计。C+对C的增强体现在两个方面:1.对原来的面向过程机制做了扩充。2.增加了面向对象的机制。学习C+之后,既可以进行面向对象的程序设计,也可以进行面向过程的程序设计。

3、,补充: C+语言的词法和词法规则,C+语言的字符集等同于C语言的字符集,包括:(1)大小写英文字母(2)数字字符(3)其他ASCII码字符(除、$外) 。单词及词法规则单词是构成语句的关键成份之一,通常由若干字符组成,C+有几种单词:1.关键字 2.标识符3.运算符 4.分隔符 5.注释符。,关键字是C+语言中的命令字,它是预定义好的单词,C+编译程序对其有专门的解释。int、float、if、else、while、switch等等。标识符程序员用标识符对程序中元素实施命名,包括函数名、类名、对象名、类型名、变量名、常变量名、数组名等。标识符以字母或下划线开始,后跟字母、数字、下划线,标识符

4、区分大小写字母。,运算符运算符代表某种操作的单词,由一个或多个字符组成。注意运算符的优先级和结合顺序。参考本书附录B(P287)。分隔符在语句中关键字和标识符之间、各个语句之间要用分隔符分开。C+常用的分隔符有空格、逗号、分号、冒号、大括号。,注释符C+提供了两种注释符。/ * 注释* / 注释,1.2 最简单的C+程序,例1.1输出一行字符“This is a C+ program.”。 #include / 用cout输出时需要用/ 此头文件 using namespace std; / 使用命名空间std int main() cout“This is a C+ program.n“;

5、/ 上面用C+的方法输出一行 return 0; ,(1)标准C+规定main函数必须声明为int类型,如果程序正常运行,向操作系统返回一个零值,否则返回非零值,通常是-1。(2)C+程序中可以用/*/做注释,可以用/做注释。前者可以做多行注释,后者只做单行注释。(3)C+程序中常用cout、cin进行输出输入,cout是C+定义的输出流对象,是插入运算符。,(4)使用cout、cin需要用头文件iostream,在程序开始要用#include声明包含的头文件。 (5) using namespace std; 意思是使用命名空间。C+标准库中的类和函数是在命名空间std中声明的,因此程序中如

6、用C+标准库中的有关内容(此时需要用#include命令行),就要用using namespace std; 语句声明。,星期5的课调到2118,例1.2 求a和b 两个数之和 / 求两数之和 #include / 预处理命令 using namespace std; / 使用命名空间std int main() / 主函数首部 / 函数体开始 int a,b,sum; / 定义变量 cinab; / 输入语句 sum=a+b; / 赋值语句 cout“a+b=“sumendl; / 输出语句 return 0; / 如程序正常结束,返回一个零值 ,cin 是C+定义的输入流对象。”是提取运算

7、符,与cin配合,其作用是从输入设备中提取数据送到输入流cin中。在程序执行时,键盘输入的第一个数据赋予a,第二个数据赋予b 。 cout语句中的endl是C+控制符常数,作用是让光标换行。 如果在本程序运行时输入: 123 456 程序则输出: a+b = 579,例1.3 求两个数中的大数 #include using namespace std; int main() int max(int x,int y) ; /对max函数作声明int a,b,c;cinab;c=max(a,b); /调用max函数couty) z=x;else z=y;return(z); ,本程序包含两个函数,

8、主函数main和被调用的函数max。max函数的作用是将两个整数中的大数赋予变量z。return语句将z的值返回给主函数main。返回值是通过函数名max带回到main函数的调用处。 程序运行情况如下: 18 25 (输入18和25) max = 25 (输出最大值25),例1.3 程序的另一种格式 #include using namespace std; int max(int x,int y) /定义max函数 int z;if(xy) z=x;else z=y;return(z); int main() int a,b,c;cinab;c=max(a,b); /调用max函数cout“

9、max=“cendl;return 0; ,例1.4包含类的C+程序 #include using namespace std; class Student / 声明一个类,类名为Student private: / 以下为类中的私有部分int num; / 私有变量numint score; / 私有变量scorepublic: / 以下为类中公用部分void setdata() / 定义公用函数setdatacinnum; / 输入num的值cinscore; / 输入score的值void display() / 定义公用函数displaycout“num=“numendl; / 输出n

10、um的值cout“score=“scoreendl; ; / 输出score的值 ; / 类的声明结束Student stud1,stud2; /定义stud1和stud2为Student类的变量,称为对象int main() / 主函数首部 stud1.setdata(); / 调用对象stud1的setdata函数stud2.setdata(); / 调用对象stud2的setdata函数stud1.display(); / 调用对象stud1的display函数stud2.display(); / 调用对象stud1的display函数return 0; ,程序中声明一个被称为类的类型S

11、tudent。声明时要用关键字class。C+类中可以包含两种成员即数据(如变量num、 score)和函数(如setdata函数和 display函数)。分别称为数据成员和成员函数。 在C+ 中将一组数据和访问这组数据的函数封装在一起,组成类。一个类是由一组数据,一组对其访问的若干函数,以及数据和函数的访问属性组成的。在前面程序中看到的private (私有) public(公有)保留字代表数据和函数的访问属性。 凡是指定为公有的数据和函数,既可由本类的函数访问和调用,也可由其他函数或语句访问和调用;凡是指定为私有的数据和函数,通常只能由本类的函数访问和调用。,程序中“Student stu

12、d1,stud2; ”是一个定义语句,定义两个Student 类型变量stud1和stud2, Student 类与int一样是C+的合法类型。 具有类类型的变量称为对象。 Student的对象stud1,stud2具有同样的结构和特征。 在类外调用成员函数时必须在函数名前冠以类的名称。,具有类类型的变量称为对象。 Student的对象stud1,stud2具有同样的结构和特征。 在类外调用成员函数时必须在函数名前冠以类的名称。,主函数中第一条语句输入学生1的学号和成绩,第二条语句输入学生2的学号和成绩,第三条语句输出学生1的学号和成绩,第四条语句输出学生2的学号和成绩。程序运行情况如下: 1

13、001 98.5 1002 76.5 num=1001 Score=98.5 num=1002 Score=76.5,为了与C兼容, C+保留了C语言中的一些规定,例如头文件的文件名,以C语言里头文件的扩展名是 .h,许多C+编译系统保留了这种扩展名,近年推出的C+编译系统新版本,推出了一批不带扩展名的头文件如iostream,string ,cmath 等。为了兼容C+仍允许使用带扩展名的头文件。由于C语言无命名空间,因此使用带扩展名的头文件时不用using namespace std。,1.3 C+对C的扩充,C+既可用于面向过程的程序设计,也可用于面向对象程序设计。C+继承了C语言提供的

14、绝大部分功能和语法规定,并在此基础上作了扩充。,1.3.1 C+的输入和输出 1.3.2 用const 定义常变量 1.3.3 函数原型声明 1.3.4 函数的重载 1.3.5 函数模板 1.3.6 有默认参数的函数 1.3.7 变量的引用 1.3.8 内置函数 1.3.9 作用域运算符 1.3.10 字符串变量 1.3.11 动态分配/回收内存运算符 1.3.12 小结,1.3.1 C+的输入输出,C+为了方便使用,除了可以利用printf和scanf函数进行输入和输出外,还增加了标准输入流输出流cin和cout。它们是在头文件iostream中定义的,标准流是不需要打开文件和关闭文件就能直

15、接操作的流式文件,在此标准输入流是指从键盘上输入的数据,标准输出流是指向屏幕输出的数据流。C+预定义的标准流如表1.2所示。,1. 用cout进行输出,格式: cout 表达式1表达式2 功能:由左向右逐个计算表达式的值,将其插入到输出流cout中。 cout 必须与输出运算符一起使用,每个后跟一个表达式,运算符的结合方向是从左向右,所以各个表达式的值按从左到右的顺序插入到输出流中。,For ( k = 1; k =3; k+)cout “k=“ kendl endl是C+输出流的常数,在头文件iostream中定义,代表让光标换行。在C+中也可以用”n”控制光标换行。所以输出语句也可写成:

16、cout “k=“ k“n”,如果要指定输出宽度,可以用控制符setw设置,需包含头文件inmanip.h,2. 用cin进行输入,格式: cin变量1 变量2 是C+的提取运算符,表示从标准输入设备取得数据,赋予其后的变量。 从键盘输入数值数据时,两个数据之间用空格分隔或用回车分隔。,int a; float b cinab; 从键盘输入 20 32.45 ,例1.5 cin和cout的使用,#include using namespace std; int main( ) coutname;cinage;cout“your name is “nameendl;cout“your age i

17、s “ ageendl; return 0; ,1.3.2用const定义常变量,C语言中用#define命令来定义符号常量 #defint PI 3.14159 实际上在C语言中,在预编译时,做的是字符的替换,之后就不在存在PI这个标识符。 int a=1,b=2; #define PI 3.14159 #define R a+b cout PI*R*Rendl; 对于这段代码它最后的实际输出时3.14159*a+b*a+b格式: const 类型 变量名 = 常数 例:const float PI= 3.14159;常变量具有变量的属性,具有数据类型,占用存储单元,有地址,可以用指针来指向

18、,只是在程序运行期间,此变量的值是固定的。,1.3.3函数原型声明,C+规定,如果函数调用在函数定义之前,要求在调用之前声明该函数的原型。 格式:函数类型 函数名(形参表); 形参表中形参可以只写类型。 例: int max ( int x , int y ); 或 int max( int , int ); 其实C+编译时,只检查参数的数据类型。,1.3.4函数的重载,C+允许在同一个域中用一个函数名定义多个函数,这些函数的参数个数、参数类型不相同。用一个函数名实现不同的功能,就是函数的重载。例1.6 设计程序计算三个数中的大数,#include using namespace std; i

19、nt max(int a,int b,int c) /求3个整数中的最大者 if (ba) a=b; if (ca) a=c; return a; float max(float a,float b, float c) /求3个实数中的最大者 if (ba) a=b;if (ca) a=c;return a; long max(long a,long b,long c) /求3个长整数中的最大者 if (ba) a=b;if (ca) a=c;return a; ,int main( ) int a,b,c; float d,e,f; long g,h,i; cinabc; cindef; c

20、inghi; int m; m= max(a,b,c); /函数值为整型 cout “max_i=“mendl; float n; n=max(d,e,f); /函数值为实型 cout“max_f=“nendl; long int p; p=max(g,h,i); /函数值为长整型 cout“max_l=“pendl; return 0; ,例 1.7,下面的例子说明用函数重载设计参数个数不同的函数,用一个函数名求两个整数或三个整数中的最大数。 #include using namespace std;int max(int a,int b,int c) /求3个整数中的最大者 if (ba)

21、 a=b;if (ca) a=c;return a; ,int max(int a, int b) /求两个整数中的最大者 if (ab) return a;else return b; int main( ) int a=7,b=-4,c=9;coutmax(a,b,c)endl; /输出3个整数中的最大者coutmax(a,b)endl; /输出两个整数中的最大者return 0; ,注意:不允许函数参数个数、参数类型都相同,只是函数返回值不同。因为系统无法从调用形式上判断调用与哪个函数相匹配。,1.3.5函数模板,如果两个函数的参数个数相同,函数的行为相同(做同样的事),只是函数参数的数

22、据类型不同,如果用函数重载的话,编写的函数代码是相同的,为了节省时间,C+提供了函数模板功能。 格式:template 函数定义(函数的类型和参数的类型用声明的标识符表示),template 是关键字,含义是模板typename 是关键字,表示其后的标识符代表类型参数,调用时根据实参的类型确定形参的类型。所谓函数模板,是建立一个通用函数,不指定函数类型和参数类型,而用一个虚拟的类型表示。在调用函数时,用实参的类型取代模板中的虚拟类型。例1.8 为计算两个数中的大数定义函数模板,#include using namespace std; template T max(T a,T b,T c) /

23、用虚拟类型T表示类型 if(ba) a=b;if(ca) a=c;return a; ,int main() int i1=8,i2=5,i3=6,i;double d1=56.9,d2=90.765,d3=43.1,d;long g1=67843,g2=-456,g3=78123,g;i=max(i1,i2,i3);d=max(d1,d2,d3);g=max(g1,g2,g3);cout“i_max=“iendl;cout“d_max=“dendl; cout“g_max=“gendl;return 0; ,从程序中看到,此问题用函数模板比用函数重载更方便。注意,函数模板只适用于函数参数的个

24、数相同而类型不同,并且函数体相同的情况,如果函数的参数个数不同,则不能用函数模板。,1.3.6有默认参数的函数,C+允许为函数的参数设置默认值,这时调用函数时,如果没有实参,就以默认值作为实参值。格式:形参类型 形参变量名 = 常数功能:调用函数时,如果没有实参,就以常数作为该形参的值;如果有实参,仍以实参的值作为该形参的值。注意:有默认值的形参必须放在形参表的右边,不允许无默认参数值和有默认参数值的形参交错排列。,例:编写计算圆柱体体积函数float volume ( float h, float r = 12.5)调用可以采用以下任何一种形式:volume( 45.6);volume( 3

25、2.5, 10.5);函数参数结合从左到右,用第一种方式调用时,只有一个实参,圆半径的值取默认值12.5,用第二种方式调用时,有两个实参,圆半径的值取实参的值10.5。,注意: 一、如果用函数原型声明,只要在函数原型声明中定义形参的默认值即可。 二、一个函数名不能同时用于重载函数和带默认形参值的函数。当调用函数时,如少写一个参数,系统无法判断是利用重载函数还是利用带默认参数值的函数,出现二义性。,例如将例1.7中的第三行改为 int max (int a, int b, int c = 100); 此时 max是重载函数,又带默认参数值,如果出现max( 5, 23)形式的调用,编译系统无法断

26、定调用哪个函数,于是发出编译出错的信息。,1.3.7变量的引用,C+提供了为变量取别名的功能,这就是变量的引用。 格式: 类型 &变量1 = 变量2 变量2是在此之前已经定义过的变量,且与变量1的类型相同。这里为变量2定义一个别名变量1,在程序里变量1和变量2 就是同一个变量。 注意:两个变量不能用同一个别名。,例:int a = 3 ,b =4;int 变量a 有两个别名b和c。,#include using namespace std; int main( ) int a=10;int ,图1.1,程序运行结果如下:100 20 20,将引用作为函数参数,C+除了可以用普通变量、指针变量做

27、形参外,还可以用引用变量做形参。(1)用普通变量做形参这时传递的是实参的值,在函数内形参与实参是两个不同的内存单元,对形参的修改不会影响实参的值。例1.10无法实现两个变量的值互换的程序,#include using namespace std; void swap(int a,int b) int temp;temp=a;a=b;b=temp; / 实现a和b的值互换 ,int main( ) int i=3,j=5;swap(i,j);couti“,“jendl; / i和j的值未互换return 0; ,图1.2,(2)用指针变量做形参C语言还允许用指针变量做形参,这时传递的是实参变量的

28、地址(指针),在函数内利用这个指针访问实参变量。例1.11用指针变量做形参,实现两个变量值的交换。,#include using namespace std; void swap(int *p1,int *p2) int temp;temp=*p1;*p1= *p2;*p2=temp; ,int main( ) int i=3,j=5;swap( ,图1.3,(3)用引用变量做形参 用指针变量做形参,它将实参变量的地址传递给形参,在函数内用“*指针变量”的方式访问实参变量。我们知道引用变量是变量的别名,在调用函数时,用引用变量做的形参就成了实参变量的别名,在函数中用的形参名就是实参的别名,这样

29、比用指针变量更直观、更方便。,例1.12利用引用变量实现两个变量值的交换 #include using namespace std; void swap(int ,int main( ) int i=3,j=5;swap(i,j);cout“i=“i“ “j=“jendl;return 0; ,图1.4,对引用的进一步说明,(1)引用变量都具有非void类型 (2)不能建立引用的数组 (3)可以建立常引用变量,不允许修改常引用变量的值 例: int i ;const int / i 不是常变量,可以修改,(4)可以建立指针变量的引用变量 例:int i; int *p = / pt是p的别名变

30、量,同时/ 也是指针变量,1.3.8内置函数,C+ 提供了一种机制,在编译时,将所调用的函数的代码嵌入到调用函数代码中,在执行函数时省去了调用环节,提高了函数的执行速度。这种机制称为内置函数,有的书称内联函数。格式:inline 函数类型 函数名(形参表) 函数体 inline 是C+的关键字,在编译时,编译程序会把这个函数嵌入到调用函数的函数体中调用格式: 函数名(实参表),例1.13计算三个整数中的大数 #include using namespace std; inline int max(int a,int b,int c) / 这是一个内置函数,/ 求3个整数中的最大者 if (ba

31、) a=b;if (ca) a=c;return a; int main( ) int i=7,j=10,k=25,m;m=max(i,j,k);cout“max=“mendl;return 0; ,由于在定义函数时指定它是内置函数,因此编译系统在遇到函数调用max( i,j,k ) 时就用max函数体的代码代替max( i,j,k ) ,同时用实参代替形参。调用语句m= max( i,j,k ) 就被置换成: a=i ; b = j ; c= k;if ( ba) a=b;if ( ca) a=c;m=a; ,例1.15用内置函数计算平方 #include using namespace s

32、td; inline int power(int x) /定义内置函数 return x*x;int main() coutpower(2)endl;coutpower(1+1)endl;return 0; ,编译程序遇见内置函数power时,先求出函数的实参值(1+1=2),然后用power函数体代替函数调用,调用语句变成: cout2*2endl;cout2*2endl;运行结果是44,使用内置函数可以节省程序的运行时间,但增加了目标程序的长度。所以在使用时要衡量时间和空间的得失。,1.3.9作用域运算符,并不是所有的变量在程序运行的时时刻刻都是可见的。有的变量在整个程序运行期间都是可见的

33、,称它们为全局变量;有的变量只能在一个函数中可知,被称为局部变量。每个变量都有其有效的作用域,程序只能在变量的有效的作用域内使用变量,不能直接使用其他域中的变量。,例1.16局部变量和全局变量同名#include using namespace std;float a=13.5;int main( ) int a=5;coutaendl;return 0; ,程序中有两个变量a,一个是全局变量,另一个是main函数的局部变量,根据局部变量会屏蔽同名的全局变量规则,在函数中出现的变量a是局部变量,因此输出的值是5,而不是13.5,为了在函数中访问全局变量C+提供了作用域运算符 : ,可以用来指定

34、要访问的作用域,可以把main函数改写成,#include using namespace std;float a=13.5;int main( )int a=5;coutaendl;cout:aendl;return 0;:a表示全局变量a。注意不能用:访问局部变量。,1.3.10字符串变量,C+提供了字符串类类型string,实际上它不是C+的基本类型,它是在C+标准库中声明的一个字符串类,程序可以用它定义对象。1.定义字符串变量格式: string 变量名表;可以在定义变量时用字符串常量为变量赋初值:string 变量名 = 字符串常量注意:如用字符串变量,在程序开始要用包含语句把C+标

35、准库的string头文件包含进来。,2.对字符串操作 对字符串变量赋值字符串变量= 字符串表达式 例: string st1,st2;st1 = “王点点“;st2 = st1;, 访问字符串中的字符 C+允许把字符串作为字符数组,第一个字符的下标是0,第二个字符的下标是1,以此类推。 例:string w = “ then”;w2 = a; 结果字符串w变成 than,输入输出字符串 格式: cin 字符串变量;cout 字符串变量;,字符串连接运算 格式:字符串1 + 字符串2 功能:把连接运算符两端的字符连接成一个字符串。表达式中可以用字符串常量也可以用字符串变量。 例:string s

36、t1=“C+”;string st2=“Language”;st1 = st1 + st2 ; 结果是 C+Language,字符串的比较运算可以用关系运算符、=、=、!=、 “chinese”运算结果是假。,3.字符串数组,可以用string来定义字符数组: 定义方法: String 字符数组名 ; String 字符数组名=“字符串1”,”字符串2”,; Eg:string name5;string name5=“Zhang”,”Li”,”Fun”,”Wang”,”Tan”;name0name1name2name3name4,说明: 在一个字符数组中包含若干个元素,每个元素相当于一个字符串

37、变量; 并不要求每个字符串变量长度相同,即便对于同一元素,其长度也是可变的; 字符数组的每一个元素中存放一个字符串,而不是字符 每一个字符串元素只包含字符本身,而不包含“0”; 用string定义的字符数串数组中实际上存放的是字符串的地址,编译器为每一个字符串变量分配固定字节数的存储空间,一般为4个字节。 Eg1.17,1.3.11动态分配/撤销内存的运算符new和delete,分配内存运算 new 类型 (初值) 类型是决定分配空间尺寸的关键元素,如果运算结果正确,它的值是分配内存空间的起始地址,否则返回NULL。 例:int *a =new int ;int *b =new int( 10

38、0);char *ch = new char10;int * q = new int 54;float * p = new float(3.14159);,归还动态内存运算 delete 指针变量 代表数组,如果不是数组可以省略。 运算功能:撤销指针变量所指的动态内存空间,指针变量的数据类型决定了空间尺寸的大小。 例:char *p=new char10; delete p;,例1.18用动态内存存放结构体变量 #include #include using namespace std; struct student char name 10;int num;char sex; ;,int m

39、ain ( ) student *p;p=new student;strcpy(p-name,“Wang Fun“);p-num=10123;p-sex=M;coutnamenumsexendl;delete p;return 0; ,先声明了一个结构体类型student,定义一个指向它的指针变量p,用new开辟一个空间存放一个student类型变量。 如果无法正常分配内存,运算会返回一个空指针NULL,程序可以设计判断结构,根据判断结果决定怎样操作。 注意不要混合使用new、delete、malloc、free。要正确搭配,不要用new分配内存后,又用free释放内存。,1.4 C+程序的编写和实现,1. 用C+语言编写程序 2. 对源程序进行编译 3. 将目标文件连接 4. 运行程序 5. 分析运行结果,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 网络科技 > C/C++资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报