C++面向对象程序设计课件

上传人:文**** 文档编号:240744963 上传时间:2024-05-04 格式:PPT 页数:67 大小:385.50KB
返回 下载 相关 举报
C++面向对象程序设计课件_第1页
第1页 / 共67页
C++面向对象程序设计课件_第2页
第2页 / 共67页
C++面向对象程序设计课件_第3页
第3页 / 共67页
点击查看更多>>
资源描述
第1章 C+概述(4学时)本章重点:C+C+在在非非面面向向对对象象方方面面的的特特性性,包包括括:新的I/O流、C+中的局部变量说明、const修饰符、内置函数、函数原型、带有缺省参数的函数、函数重载、new和delete运算符、引用内容:1.1 C+的起源和特点1.2 C+源程序的构成1.3 C+的一些扩充特性 本章小结 测试题Home1.1 C+的起源和特点 一、一、C+的起源的起源vC+是是美美国国贝贝尔尔实实验验室室在在C语语言言的的基基础础上上,增增加加了了面面向向对对象象的的特特征征,于于1980年年开开发发出出来来的的一一种种过过程程性性与与对对象象性性结结合合的的程程序序语语言言。最最初初把它称为把它称为“带类的带类的C”,83年后才取名为年后才取名为C+。vC语语言言已已经经被被公公认认为为是是非非常常好好的的一一种种中中级级语语言,但它也有一些局限:言,但它也有一些局限:1.C的的类类型型检检查查机机制制相相对对较较弱弱,这这使使得得程程序序中中的的一一些些错错误误不不能能在在编编译译阶阶段段由由编编译译器器检检查出来。如:查出来。如:float x;scanf(“%d”,&x);BackNext2.C语语言言本本身身几几乎乎没没有有支支持持代代码码重重用用的的语语言言结结构构。如如:求求一一个个数数的的绝绝对对值值,对对于于int型型数数据据:int abs(int x);而对于而对于float型数据则写成:型数据则写成:float fabs(flaot x);3.C语语言言不不适适合合开开发发大大型型程程序序,当当程程序序达达到到一一定定规规模模时,程序员很难控制程序的复杂性。时,程序员很难控制程序的复杂性。vC+正是为了解决上述问题而设计的。正是为了解决上述问题而设计的。C+继继承了承了C的原有精髓(如高效率、灵活性),扩的原有精髓(如高效率、灵活性),扩充增加了对开发大型软件颇为有效的面向对象充增加了对开发大型软件颇为有效的面向对象的机制等等,成为一种既可用于表现过程模型,的机制等等,成为一种既可用于表现过程模型,又可用于表现对象模型的优秀的程序设计语言又可用于表现对象模型的优秀的程序设计语言之一。之一。BackPrevious Next二、二、C+的特点的特点(1)C+保持与保持与C兼容。兼容。(2)用用C+编编写写的的程程序序可可读读性性更更好好,代代码码结结构构更更为为合理合理,可直接地在程序中映射问题空间的结构。可直接地在程序中映射问题空间的结构。(3)生生成成代代码码的的质质量量高高,运运行行效效率率仅仅比比汇汇编编语语言言代代码段慢码段慢10%到到20%。(4)从从开开发发时时间间、费费用用到到形形成成的的软软件件的的可可重重用用性性、可可扩扩充充性性、可可维维护护性性和和可可靠靠性性等等方方面面有有了了很很大大的的提提高高,使使得得大大中中型型的的程程序序开开发发项项目目变变得得容容易的多。易的多。(5)支持面向对象的机制支持面向对象的机制,可方便地构造出模拟现可方便地构造出模拟现实问题的实体和操作。实问题的实体和操作。BackPrevious1.2 C+源程序的构成 一、一、C+程序的一般格式程序的一般格式 例2.1:求两个数中的最大值的C和C+程序 C程序:MyMax.cC+程序:MyMax.cpp 练习:将C语言程序改写为C+程序 BackNext二、二、C+程序的结构特点程序的结构特点 C+与C相同之处:1.程序通常由一组函数组成,函数是构成C+程序的基本单位。main为主函数,程序总是从它开始运行,与其所处的位置无关。2.函数由函数的说明部分和函数体两部分组成。3.每个语句和数据定义必须以分号结束。一行内可写多条语句,一个语句也可写成许多行。不同:1.C源程序文件扩展名为.C,而C+为.CPP2.对于一般的C+编译器,当给定扩展名为.c时,启动C的编译器;而当给定扩展名为.cpp时则启动C+的编译器。BackPrevious1.3 C+在非面向对象方面的一在非面向对象方面的一些特性些特性 1.1.注释行注释行 2.2.新的新的I/OI/O流流 3.3.constconst修饰符修饰符4.函数原型函数原型5.5.函数重载函数重载6.6.带有缺省参数的函数带有缺省参数的函数7.7.引用引用8.8.内置函数内置函数 9.9.全局变量作用域运算全局变量作用域运算符符“:”10.10.字符串变量字符串变量11.11.强制类型转换强制类型转换 12.12.newnew和和deletedelete运算符运算符 一、注释行一、注释行 1.C语言注释方式:/*/v/*This is a C+program.*/v/*This is a C+program.*/2.C+的注释方式:/vx=x+2;/使x加2v/下列函数求两个数中的是大 int max(int x,int y)3.两种注释方式在C+中可以混合使用Back二、新的二、新的I/O流流 1使用cin和cout分别实现输入和输出操作时,在程序中必须嵌入头文件iostream.h。例2.22在C+程序中仍然可以沿用传统的stdio函数库中的I/O函数。C的输入输出 C+的输入输出3使用cin可以连续输入多个数据,cout可以连续输出多个数据。4用cin或cout时,使用了系统缺省的格式。实际上我们可以对其进行控制(见7.3节)。例2.35在C+中可以使用endl来代替“n”实现输出换行。C+的换行控制Back三、三、const修饰符修饰符在在C中中,习习惯惯使使用用#define来来定定义义常常量量,例例如:如:#define PI3.15159;#define R a+b cout PI*R*Rendl;实际输出的是实际输出的是 3.14159*a+b*a+bC+提提供供一一种种更更灵灵活活、更更安安全全的的方方式式来来定定义义常量,即常量,即const修饰符。一般的语法格式:修饰符。一般的语法格式:const 类型名类型名 常量标识符常量标识符=常量表达式常量表达式;BackNext 对于上例,用对于上例,用const定义为:定义为:const float PI=3.14159;这个常量这个常量LIMIT是类型化的,它有地是类型化的,它有地址,可以用指针指向这个值,但不能修址,可以用指针指向这个值,但不能修改它。改它。const也可以与指针一起使用,它们也可以与指针一起使用,它们的组合有三种的组合有三种(在第三章中介绍在第三章中介绍)BackNext1.1.指向常量的指针变量:指向常量的指针变量:如:const int*x;BackNextPrevious 使用指针定义的技巧,正如任何复杂的定使用指针定义的技巧,正如任何复杂的定义一样,是在标识符的开始处读它并从里向外义一样,是在标识符的开始处读它并从里向外读读,c o n s t指定那个指定那个“最靠近最靠近”的。的。“x是一个指针,它指向一个是一个指针,它指向一个 int型,这个型,这个int数据是个常量数据是个常量”。这里不需要初始化,因为说这里不需要初始化,因为说x可以指向任何东西可以指向任何东西(那是说,它不是一个(那是说,它不是一个c o n s t),但它所指的东西是不能被改变的。但它所指的东西是不能被改变的。2.2.常常(量量)指针:指针:BackNextPrevious“x是个常量,也是一个指针,这个指针是指向是个常量,也是一个指针,这个指针是指向i n t型数据型数据”。因为现在指针本身是因为现在指针本身是c o n s t指指针,编译器要求给它一个初始化值,这个值在针,编译器要求给它一个初始化值,这个值在指针寿命期间不变。指针寿命期间不变。使指针本身成为一个c o n s t指针,必须把c o n s t标明的部分放在*的右边,如:int d=1;Int*const x=&d;3.3.指向常量的常指向常量的常(量量)指针:指针:如:const char*const name=“chen”;以下语句:name3=a;/错误 name=“zhang”;/错误“chen”name常量常量常量常量BackPrevious四、函数原型声明四、函数原型声明 除主函数外:除主函数外:vC语言语言建议建议为程序中的每一个函数为程序中的每一个函数建立原型;建立原型;vC+要求要求必须必须为每一个函数建立原为每一个函数建立原型。型。函数原型的语法格式:函数原型的语法格式:1.函数类型函数类型 函数名函数名(参数表参数表);2.函数类型函数类型 函数名函数名(类型表类型表);例1.9 Back说明:说明:1.如果一个函数没有返回值,则必须如果一个函数没有返回值,则必须在函数原型中使用在函数原型中使用void类型符。类型符。2.如果函数原型中未注明参数,如果函数原型中未注明参数,C+假定该函数的参数表为空假定该函数的参数表为空(void)。如如f();和和f(void);是等价的。是等价的。BackNextPreviousvC+中中允允许许在在代代码码块块中中的的任任何何地地方方说说明明局局部部变量变量:v它它所所说说明明的的变变量量从从其其说说明明地地点点到到该该变变量量所所在在的的最最小小分分程程序序末末的的范范围围内内有有效效(或或从从其其说说明明地点开始有效)。地点开始有效)。C+局部变量的使用局部变量的使用通常认为:通常认为:v在在大大函函数数中中,在在最最靠靠近近使使用用变变量量的的位位置置说说明明变量较为合理;变量较为合理;v在在较较短短的的函函数数中中,把把局局部部变变量量集集中中在在函函数数开开始处说明比较好。始处说明比较好。v结构、联合和枚举名可直接作为类型名结构、联合和枚举名可直接作为类型名 在C+中,结构名、联合名(共用体名)、枚举名都是类型名。如:enum boolFALSE,TRUE;struct string char*prt;int length;在C中:enum bool done;struct string str;在C+中:bool done;string str;Back五、函数重载五、函数重载 v在传统的在传统的C语言中,函数名必须是唯一的,语言中,函数名必须是唯一的,也就是说也就是说不允许出现同名不允许出现同名的函数。当要的函数。当要求编写求整数、浮点数和双精度的平方求编写求整数、浮点数和双精度的平方数的函数时,若用数的函数时,若用C来实现必须编写三个来实现必须编写三个函数:函数:iSquare(int x)fSquare(float x)dSquare(double x)BackNextv在在C+中用户可以重载函数,即只要函中用户可以重载函数,即只要函数参数的类型不同,或者参数的个数不数参数的类型不同,或者参数的个数不同,或者二者兼而有之,两个或两个以同,或者二者兼而有之,两个或两个以上的函数上的函数可以使用相同的函数名可以使用相同的函数名。v当两个或者两个以上的函数共用一个函当两个或者两个以上的函数共用一个函数名时,称为函数的重载。数名时,称为函数的重载。v例1.10 练习1 练习2 v例1.11BackNext说明:1.重载函数应在参数个数或参数类型上有所重载函数应在参数个数或参数类型上有所不同,否则编译程序将无法确定调用哪一不同,否则编译程序将无法确定调用哪一个重载版本,即使返回类型不同也不能区个重载版本,即使返回类型不同也不能区分。例如:分。例如:int mul(int x,int y);double mul(int x,int y);2.一般而言,重载函数应执行相同的功能,一般而言,重载函数应执行相同的功能,例如例如abs()函数一般用来返回一个数的绝函数一般用来返回一个数的绝对值,如果重载对值,如果重载abs()函数,让它返回一函数,让它返回一个数的平方根,则是不可取的。个数的平方根,则是不可取的。BackNextPrevious六、带有缺省参数的函数六、带有缺省参数的函数 C+在说明函数原型时,可为一个或在说明函数原型时,可为一个或多个参数指定缺省参数值,以后调用此函多个参数指定缺省参数值,以后调用此函数,若省略其中某一参数,数,若省略其中某一参数,C+自动地以自动地以缺省值作为相应参数的值。缺省值作为相应参数的值。例如例如函数原型函数原型说明为:说明为:int special(int x=5,float y=5.3);Back当进行函数调用时,可以有以下几种形式:当进行函数调用时,可以有以下几种形式:1)special(100,79.8);/x=100,y=79.82)special(25);/x=25,y=79.8 3)special();/x=5,y=79.8 说明:说明:1.缺缺省省参参数数都都必必须须出出现现在在不不取取缺缺省省值值的的参参数数右右边。如:边。如:int fun(int i,int j=5,int k);(错误错误)2.2.在在函函数数调调用用时时,若若某某个个参参数数省省略略,则则其其后后的的参数皆应省略而采用缺省值。参数皆应省略而采用缺省值。练习1 练习 2BackNextPrevious七、引用七、引用引用就是给变量一个别名,使指针运算引用就是给变量一个别名,使指针运算更加方便。更加方便。1.1.引用的定义引用的定义 类型名类型名&别名别名=变量名或别名;变量名或别名;如:如:int a=5;int&b=a;int a=5;int&b=a;例2.17 5a(b)BackNext说明:说明:1)1)定义引用时必须初始化,如下是错误定义引用时必须初始化,如下是错误的:的:int a;int&b;/错误错误 b=a;初始化可以为另一个引用名,如下:初始化可以为另一个引用名,如下:int a;int&b=a;int&c=b;(c)a(b)BackNext2)2)引用实际上是一种隐式指针。引用实际上是一种隐式指针。int i=15;int*iptr=&i;int&rptr=i;例例2.18 3)3)引用不可重新赋新值,如:引用不可重新赋新值,如:int i,k;int&j=i;j=&k;/错误错误 15i(rptr)iptrBackNextPrevious4)4)引用不同于普通变量,以下都非法:引用不同于普通变量,以下都非法:int&b3;/不能建立引用数组不能建立引用数组int&*p;/不能建立指向引用的指针不能建立指向引用的指针int&r;/不能建立引用的引用不能建立引用的引用 5)5)地址运算符地址运算符(&)仍保持原义,如:仍保持原义,如:int num=50;int&ref=num;int*p=&ref;/与与 int*p=#相同相同 BackNextPrevious2.引用作参数引用作参数 v引用作参数是引用的重要用途。如:int func(int&x,int&y)v两个数互换的函数例2.19:使用指针void swap(int*m,int*n)int temp;temp=*m;*m=*n;*n=temp;void main()int a=10,b=20;swap(&a,&b);coutabendl;BackNextPrevious1020a b&a&bm ntemp101020例2.20:使用引用void swap(int&m,int&n)int temp;temp=m;m=n;n=temp;void main()int a=10,b=20;swap(a,b);coutabendl;1020a b(m)(n)temp102010BackNextPreviousv通过引用参数产生的效果同按地址传递通过引用参数产生的效果同按地址传递是一样的,但其语法更清楚简单,因为是一样的,但其语法更清楚简单,因为在调用函数的所有参数前不需要间接引在调用函数的所有参数前不需要间接引用运算符用运算符*,原函数中传送的参数也不必,原函数中传送的参数也不必是引用变量。是引用变量。vC+主张用引用传递取代地址传递的方主张用引用传递取代地址传递的方式,因为引用语法容易且不易出错。式,因为引用语法容易且不易出错。BackNextPreviousv在函数说明前冠以关键字在函数说明前冠以关键字“inline”,则,则该函数就被声明为内置函数。该函数就被声明为内置函数。v每当程序中出现对该函数的调用时,每当程序中出现对该函数的调用时,C+编译器使用函数体内的代码替代函数调用编译器使用函数体内的代码替代函数调用表达式,这样能加快代码的执行,减少调表达式,这样能加快代码的执行,减少调用开销。用开销。Back八、内置函数八、内置函数Nextv使用内置函数替代宏定义,可以消除使用内置函数替代宏定义,可以消除宏定义的不安全性。内置函数具有宏宏定义的不安全性。内置函数具有宏定义的所有优点而没有缺点。定义的所有优点而没有缺点。例2.7使用宏定义例 2.8使用内置函数v练习:写出程序的运行结果。然后将写出程序的运行结果。然后将其改写为内置函数,再次写出运行结其改写为内置函数,再次写出运行结果。果。BackNextPrevious九、全局变量作用域运算符九、全局变量作用域运算符“:”通常情况下,如果有两个同名变量,一个通常情况下,如果有两个同名变量,一个是全局的,另一个是局部的,那么局部变量是全局的,另一个是局部的,那么局部变量在其作用域内具有较高的优先权。在其作用域内具有较高的优先权。例例2.12如果希望在局部变量的作用域内使用同名如果希望在局部变量的作用域内使用同名的全局变量,可以在该变量前加上的全局变量,可以在该变量前加上“:”,此时此时:avar代表全局变量代表全局变量avar,“:”称为作称为作用域运算符。用域运算符。BackNext十、字符串变量十、字符串变量vC+中可用中可用string类型定义字符串变量,用类型定义字符串变量,用以代替字符数组以代替字符数组(charn),如:,如:string word=“then”;/定义并初始化变量定义并初始化变量word word2=“a”;/修改修改wordo为为”than”v注意:注意:1.使用使用string类型时,必须包含头文件类型时,必须包含头文件“string”,即:即:#include 2.定义定义string类型时不需定义长度,而定义字类型时不需定义长度,而定义字符数组符数组char时必须注意长度。时必须注意长度。char str10;str=“Hello!”;(错误错误)3.字符串相加结果二个字符串的串联:字符串相加结果二个字符串的串联:string str1=“C+”;string str2=“你好你好”;则则 str1 =str1+str2;/str1=“C+你好你好”十一、强制类型转换十一、强制类型转换 vC中使用形如(int)x的形式。vC+中还允许另一种更为方便的函数调用方法形式,如int(x)。v以上两种方法C+都能接受,但推荐使用后一种方法。例BackNext十二、十二、new和和delete运算符运算符在C中动态内存分配是靠malloc()和free()两个函数完成的。在C+中动态内存分配有更好、更简单的方法:(1)分配内存:分配内存:p=new 数据类型数据类型;(2)释放内存:释放内存:delete p;BackNext说明:1.new在为简单变量分配内存的同时进行初始化。如:int*p;p=new int(90);例2.15 2.使用new可以为数组动态分配内存。如:int*p=new int10;3.释放动态分配的数组内存区时,使用如下的格式:delete p;例2.15.1编程练习:将输入数据中高于平均数的数据输出。4.使用new动态分配内存时,如果没有足够的内存时,将返回空指针(NULL)。例2.16Next Back第2章小结本章主要介绍了C+在非面向对象方面的一些重要特性:注释行;新的I/O流;灵活的局部变量说明;结构、联合和枚举名可直接作为类型名;const修饰符;内置函数;函数原型;带有缺省参数的函数;函数重载;全局变量作用域运算符“:”;无名联合;强制类型转换;new和delete运算符;引用这些新特性使C+比C更简洁或更安全,使得C+更好用。Back第2章测试题 单选题:单选题:1、在C+中,单行注释语句通常使用_。A)/B)/*/C)note D)&NextBack第2章测试题 2、在C+中的开头必须使用#include 命令,以设置C+风格的I/O环境。A)stdio.hB)math.hC)string.hD)iostream.hNextPreviousBack第2章测试题 3、C+中换行可以使用“n”转义字符,也可以使用换行控制符_。A)endlB)endlineC)endD)enterNextPreviousBack第2章测试题 4、若有:int a=5;char x=65;则:coutax;语句在屏幕上输出的结果是_。A)565B)5 65C)5AD)5 ANextPreviousBack第2章测试题 5、若有:int x=36;希望用八进制输出x的值,则输出语句应写成:_。A)coutx;B)coutdecx;C)couthexx;D)coutoctn;int an;是可以执行的,其作用是说明一个整型数组a,共有n个元素。NextPreviousBack第2章测试题 10、使用new操作符分配动态内存时,若没有足够的内存,new将返回NULL。11、有int a;int b=a;a=10;b=20;则couta,ab;4、求圆柱体的体积。(1)cinradius;(2)cinheigh;NextPreviousBack第2章测试题 5、求圆柱体的表面积。(1)double height;(2)double area;6、请重载求符号Sgn函数。(1)Sgn(float x)(2)Sgn(double x)7、请重载mul函数,完成对给定的参数的乘积。(1)int mul(int a,int b,int c)(2)int mul(int a,int b,int c,int d)8、请重载Power函数,完成求x的n次方。(1)float Power(float x,int n)(2)double Power(double x,int n)NextPreviousBack第2章测试题 9、请重载Add函数,完成两个数相加。(1)float Add(float x,float y)(2)double Add(double x,double y)10、请重载Sub函数,完成两个数相减。(1)int Sub(int x,int y)(2)float Sub(float x,float y)NextPreviousBack第2章测试题 修改程序修改程序1、将程序中的circle函数修改为内置函数。将第将第2行改为:行改为:inline float circle(float r)2、求数组中的最高分、最低分和平均分,请修改程序。将第将第2行改为:行改为:double Average(int*p,int n,int&m1,int&m2)3、程序中使用动态分配内存的方法,将键盘输入的一个整型数据在屏幕上输出,程序如何修改。在第在第3行后面插入:行后面插入:p=new int;4、使用函数求两个数的和、差和积。请修改程序使之正确。将第将第2行改为:行改为:int mul(int x,int y,int&sum,int&sub)NextPreviousBack第2章测试题 5、下列程序有问题,请修改正确。在第在第1行后面插入:行后面插入:void write(char*s);6、通过函数求某数的平方和立方。将第将第2行改为:行改为:int Cub(int x,int&Sqr)7、程序中使用了同名的全局变量和局部变量,请修改程序,分别输出全局变量和局部变量的值。在第在第1行后面插入:行后面插入:int aver;8、通过函数求两个数的最大值和最小值。将第将第2行改为:行改为:void MaxAndMin(int x,int y,int&Max,int&Min)BackNextPrevious第2章测试题 9、请把求三角形面积的函数声明为内置函数。在第在第2行后面插入:行后面插入:inline double Area(int a,int b,int c);10、通过函数求两个数的最大值和最小值。将第将第2行改为:行改为:int MaxAndMin(int x,int y,int&Min)Previous Back
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!