C面向对象程序设计

上传人:新** 文档编号:569530988 上传时间:2024-07-30 格式:PPT 页数:50 大小:670KB
返回 下载 相关 举报
C面向对象程序设计_第1页
第1页 / 共50页
C面向对象程序设计_第2页
第2页 / 共50页
C面向对象程序设计_第3页
第3页 / 共50页
C面向对象程序设计_第4页
第4页 / 共50页
C面向对象程序设计_第5页
第5页 / 共50页
点击查看更多>>
资源描述

《C面向对象程序设计》由会员分享,可在线阅读,更多相关《C面向对象程序设计(50页珍藏版)》请在金锄头文库上搜索。

1、聊城大学数学科学学院聊城大学数学科学学院 郑红霞郑红霞C+C+面向对象程序设计面向对象程序设计学习建议学习建议v1.1.把把C+C+当成一门新的语言学习;当成一门新的语言学习;v2.2.不要被不要被VCVC、BCBBCB、BCBC、MCMC、TCTC等词汇所迷惑等词汇所迷惑他们都是集成开发环他们都是集成开发环境境, ,而我们要学的是一门语言;而我们要学的是一门语言;v3.3.不要放过任何一个看上去很简单的小编程问题不要放过任何一个看上去很简单的小编程问题他们往往并不那么他们往往并不那么简单简单, ,或者可以引伸出很多知识点;或者可以引伸出很多知识点;v4.4.会用会用Visual C+,Vis

2、ual C+,并不说明你会并不说明你会C+C+;v5.5.学学C+C+并不难并不难, ,难的是长期坚持实践和不遗余力的博览群书;难的是长期坚持实践和不遗余力的博览群书;v6.6.看看Visual C+Visual C+的书的书, ,是学不了是学不了C+C+语言的;语言的;v7.C+7.C+不仅仅是支持面向对象的程序设计语言;不仅仅是支持面向对象的程序设计语言;v8.8.学习编程最好的方法之一就是阅读源代码;学习编程最好的方法之一就是阅读源代码;v9.9.看得懂的书看得懂的书, ,请仔细看;看不懂的书请仔细看;看不懂的书, ,请硬着头皮看;请硬着头皮看;v10.10.别指望看第一遍书就能记住和掌

3、握什么别指望看第一遍书就能记住和掌握什么请看第二遍、第三遍;请看第二遍、第三遍;v11.11.不要停留在集成开发环境的摇篮上不要停留在集成开发环境的摇篮上, ,要学会控制集成开发环境要学会控制集成开发环境, ,还要还要学会用命令行方式处理程序;学会用命令行方式处理程序;学习建议学习建议v12.12.学习编程的秘诀是:编程学习编程的秘诀是:编程, ,编程编程, ,再编程;再编程;v13.13.面向对象技术不只是面向对象技术不只是C+C+专有的;专有的;v14.14.请把书上的程序例子亲手输入到电脑上实践请把书上的程序例子亲手输入到电脑上实践, ,即使配套光盘中有源代即使配套光盘中有源代码;码;v

4、15.15.把在书中看到的有意义的例子扩充;把在书中看到的有意义的例子扩充;v16.16.请重视请重视C+C+中的异常处理技术中的异常处理技术, ,并将其切实的运用到自己的程序中;并将其切实的运用到自己的程序中;v17.17.经常回顾自己以前写过的程序经常回顾自己以前写过的程序, ,并尝试重写并尝试重写, ,把自己学到的新知识运把自己学到的新知识运用进去;用进去;v18.18.不要漏掉书中任何一个练习题不要漏掉书中任何一个练习题请全部做完并记录下解题思路;请全部做完并记录下解题思路;v19.C+19.C+语言和语言和C+C+的集成开发环境要同时学习和掌握;的集成开发环境要同时学习和掌握;v20

5、.20.既然决定了学既然决定了学C+C+就请坚持学下去就请坚持学下去, ,因为学习程序设计语言的目的是因为学习程序设计语言的目的是掌握程序设计技术掌握程序设计技术, ,而程序设计技术是跨语言的;而程序设计技术是跨语言的;v21.21.别心急别心急, ,设计设计C+C+的的classclass确实不容易;自己程序中的确实不容易;自己程序中的classclass和自己的和自己的classclass设计水平是在不断的编程实践中完善和发展的;设计水平是在不断的编程实践中完善和发展的;v22.22.决不要因为程序决不要因为程序“很小很小”就不遵循某些你不熟练的规则就不遵循某些你不熟练的规则好习惯好习惯是

6、培养出来的是培养出来的, ,而不是一次记住的。而不是一次记住的。学习任务和目的学习任务和目的v熟练掌握面向对象程序设计的核心概念:封装、继承、多态、熟练掌握面向对象程序设计的核心概念:封装、继承、多态、类属;类属;v熟练掌握用熟练掌握用C+C+定义类和操作对象的方法;定义类和操作对象的方法;v熟练掌握有关派生类的构造机制、多态的实现技术;熟练掌握有关派生类的构造机制、多态的实现技术;v了解异常处理、了解异常处理、I/OI/O流。流。v能够对现实世界中较简单的问题及其解决方法用计算机语言能够对现实世界中较简单的问题及其解决方法用计算机语言进行描述进行描述, ,进而学会利用进而学会利用C+C+语言

7、学会解决一般应用问题语言学会解决一般应用问题, ,并并为后续学习奠定程序设计基础。为后续学习奠定程序设计基础。总总 目目 录录v第第1 1章章 C+C+的初步知识的初步知识v第第2 2章章 类和对象类和对象v第第3 3章章 关于类和对象的进一步讨论关于类和对象的进一步讨论v第第4 4章章 运算符重载运算符重载v第第5 5章章 继承与派生继承与派生v第第6 6章章 多态性与虚函数多态性与虚函数v第第7 7章章 输入输出流输入输出流v第第8 8章章 C+C+工具工具第第1 1章章 C+C+的初步知识(主目录)的初步知识(主目录)v1.1 1.1 从从C C到到C+C+(自学)(自学)v1.2 1.

8、2 最简单的最简单的C+C+程序程序v1.3 1.3 C+C+对对C C的扩充的扩充v1.4 1.4 C+C+程序的编写和实现程序的编写和实现v1.5 1.5 关于关于C+C+上机实践上机实践1.1 1.1 从从C C到到C+C+v计算机诞生初期计算机诞生初期, ,人们要使用计算机必须用机器语言或汇编人们要使用计算机必须用机器语言或汇编语言编写程序。世界上第一种计算机高级语言诞生于语言编写程序。世界上第一种计算机高级语言诞生于19541954年年, ,它是它是FORTRANFORTRAN语言。先后出现了多种计算机高级语言。语言。先后出现了多种计算机高级语言。其中使用最广泛、影响最大的当推其中使

9、用最广泛、影响最大的当推BASICBASIC语言和语言和C C语言。语言。vBASICBASIC语言是语言是19641964年在年在FORTRANFORTRAN语言的基础上简化而成的语言的基础上简化而成的, ,它它是为初学者设计的小型高级语言。是为初学者设计的小型高级语言。vC C语言是语言是19721972年由美国贝尔实验室的年由美国贝尔实验室的D.M.RitchieD.M.Ritchie研制成功的。研制成功的。它不是为初学者设计的它不是为初学者设计的, ,而是为计算机专业人员设计的。大而是为计算机专业人员设计的。大多数系统软件和许多应用软件都是用多数系统软件和许多应用软件都是用C C语言编

10、写的。语言编写的。1.1 1.1 从从C C到到C+C+v但是随着软件规模的增大但是随着软件规模的增大, ,用用C C语言编写程序渐渐显得有些吃语言编写程序渐渐显得有些吃力了。力了。vC+C+是由是由AT&T Bell(AT&T Bell(贝尔贝尔) )实验室的实验室的BjarneBjarne StroustrupStroustrup博士博士及其同事于及其同事于2020世纪世纪8080年代初在年代初在C C语言的基础上开发成功的。语言的基础上开发成功的。C+C+保留了保留了C C语言原有的所有优点语言原有的所有优点, ,增加了面向对象的机制。增加了面向对象的机制。vC+C+是由是由C C发展而

11、来的发展而来的, ,与与C C兼容。用兼容。用C C语言写的程序基本上可语言写的程序基本上可以不加修改地用于以不加修改地用于C+C+。从从C+C+的名字可以看出它是的名字可以看出它是C C的超集。的超集。C+C+既可用于面向过程的结构化程序设计既可用于面向过程的结构化程序设计, ,又可用于面向对又可用于面向对象的程序设计象的程序设计, ,是一种功能强大的混合型的程序设计语言。是一种功能强大的混合型的程序设计语言。1.1 1.1 从从C C到到C+C+vC+C+对对C C的的“增强增强”, ,表现在两个方面:表现在两个方面: 在面向过程的机制基础上在面向过程的机制基础上, ,对对C C语言的功能

12、做了不少扩充。语言的功能做了不少扩充。增加了面向对象的机制。增加了面向对象的机制。v面向对象程序设计面向对象程序设计, ,是针对开发较大规模的程序而提出来的是针对开发较大规模的程序而提出来的, ,目的是提高软件开发的效率。目的是提高软件开发的效率。v不要把面向对象和面向过程对立起来不要把面向对象和面向过程对立起来, ,面向对象和面向过程面向对象和面向过程不是矛盾的不是矛盾的, ,而是各有用途、互为补充的。而是各有用途、互为补充的。v学习学习C+,C+,既要会利用既要会利用C+C+进行面向过程的结构化程序设计进行面向过程的结构化程序设计, ,也也要会利用要会利用C+C+进行面向对象的程序设计。进

13、行面向对象的程序设计。vC+C+对对C C的的“增强增强”, ,表现在两个方面:表现在两个方面: 在面向过程的机制基础上在面向过程的机制基础上, ,对对C C语言的功能做了不少扩充。语言的功能做了不少扩充。增加了面向对象的机制。增加了面向对象的机制。v面向对象程序设计面向对象程序设计, ,是针对开发较大规模的程序而提出来的是针对开发较大规模的程序而提出来的, ,目的是提高软件开发的效率。目的是提高软件开发的效率。v不要把面向对象和面向过程对立起来不要把面向对象和面向过程对立起来, ,面向对象和面向过程面向对象和面向过程不是矛盾的不是矛盾的, ,而是各有用途、互为补充的。而是各有用途、互为补充的

14、。v学习学习C+,C+,既要会利用既要会利用C+C+进行面向过程的结构化程序设计进行面向过程的结构化程序设计, ,也也要会利用要会利用C+C+进行面向对象的程序设计。进行面向对象的程序设计。1.2 1.2 最简单的最简单的C+C+程序程序v例例1.1 1.1 输出一行字符:输出一行字符: “ “This is a C+ program.”This is a C+ program.”。# #include include /包含头文件包含头文件iostreamiostreamusing namespace std; using namespace std; /使用命名空间使用命名空间stdstd

15、intint main( ) main( ) coutcoutThis is a C+ program.;This is a C+ program.;return 0;return 0; v在运行时会在屏幕上输出以下一行信息在运行时会在屏幕上输出以下一行信息: :This is a C+ program. This is a C+ program. 声明函数的声明函数的类型为整型类型为整型向操作系统返回一个零值。向操作系统返回一个零值。如果程序不能正常执行如果程序不能正常执行,则会自则会自动向操作系统返回一个非零值动向操作系统返回一个非零值,一一般为般为-1。C+的一个预处理命令的一个预处理命

16、令C+标准库中的类和函标准库中的类和函数是在命名空间数是在命名空间std中声中声明的;明的;程序中如果需要用到程序中如果需要用到C+标准库标准库(此时就需要此时就需要用用#include命令行命令行),就就需要用该句需要用该句1.2 1.2 最简单的最简单的C+C+程序程序v例例1.2 1.2 求求a a和和b b两个数之和。两个数之和。# #include include /预处理命令预处理命令using namespace std; using namespace std; /使用命名空间使用命名空间stdstdintint main( ) main( ) /主函数首部主函数首部 /函数体

17、开始函数体开始intint a,b,suma,b,sum; ; /定义变量定义变量 cincinab; ab; /输入语句输入语句 sum=sum=a+ba+b; ; /赋值语句赋值语句coutcouta+ba+b=sum=sumendlendl; ; /输出语句输出语句return 0; return 0; /如程序正常结束如程序正常结束, ,向操作系统返回一个零值向操作系统返回一个零值 /函数结束函数结束1.2 1.2 最简单的最简单的C+C+程序程序v例例1.3 1.3 给两个数给两个数x x和和y,y,求两数中的大者。在本例中包含两个求两数中的大者。在本例中包含两个函数。函数。# #i

18、nclude include /预处理命令预处理命令using namespace std;using namespace std;intint max(intmax(int x,intx,int y) y) /定义定义maxmax函数函数 /maxmax函数体开始函数体开始 intint z; z; /变量声明变量声明 if(xif(xy) z=x; y) z=x; else z=y; else z=y; return(zreturn(z); ); /将将z z的值返回的值返回, ,通过通过maxmax带回调用处带回调用处 1.2 1.2 最简单的最简单的C+C+程序程序intint mai

19、n( ) main( )/主函数主函数 /主函数体开始主函数体开始 intint a,b,ma,b,m; ; /变量声明变量声明 cincinab; ab; /输入变量输入变量a a和和b b的值的值 m=m=max(a,bmax(a,b); ); /调用调用maxmax函数函数, ,将得到的值赋给将得到的值赋给m mcoutcoutmax=mmax=mendlendl; ; /输出大数输出大数m m的值的值return 0; return 0; /如程序正常结束如程序正常结束, ,向操作系统返回一个零值向操作系统返回一个零值 /主函数结束主函数结束本程序包括两个函数本程序包括两个函数: :主

20、函数主函数mainmain和被调用的函数和被调用的函数maxmax。程序运行情况如下程序运行情况如下: : 18 25 (18 25 (输入输入1818和和2525给给a a和和b)b)max=25 (max=25 (输出输出m m的值的值) ) 注意输入的两个数据间用一个或多个空注意输入的两个数据间用一个或多个空格间隔格间隔,不能以逗号或其他符号间隔。不能以逗号或其他符号间隔。1.2 1.2 最简单的最简单的C+C+程序程序例例1.4 包含类的包含类的C+程序。程序。#include using namespace std;类的说明符成员成员函数函数数据成员数据成员class Student

21、 class Student / / 声明一个类声明一个类, ,类名为类名为StudentStudent private: private: / / 以下为类中的私有部分以下为类中的私有部分intint num; num; / / 私有变量私有变量numnumintint score; score; / / 私有变量私有变量scorescorepublic: public: / / 以下为类中的公用部分以下为类中的公用部分void void setdatasetdata( ) ( ) / / 定义公用函数定义公用函数setdatasetdata cincinnum; num; / / 输入输入

22、numnum的值的值cincinscore;score;/ / 输入输入scorescore的值的值 void display( ) void display( ) / / 定义公用函数定义公用函数displaydisplay coutcoutnum=numnum=numendlendl; ; / / 输出输出numnum的值的值 coutcoutscore=scorescore=scoreendlendl; ; ; ; / / 类的声明结束类的声明结束 Student stud1,stud2; Student stud1,stud2; /定义对象定义对象intint main( ) main

23、( ) / / 主函数首部主函数首部 stud1.setdata( ); stud1.setdata( ); / / 调用对象调用对象stud1stud1的的setdatasetdata函数函数stud2.setdata( ); stud2.setdata( ); / 调用对象调用对象stud2stud2的的setdatasetdata函数函数stud1.displaystud1.display( ); ( ); / / 调用对象调用对象stud1stud1的的displaydisplay函数函数stud2.display( ); stud2.display( ); / / 调用对象调用对象s

24、tud2stud2的的displaydisplay函数函数return 0;return 0; v类的两种成员:类的两种成员: 数据和函数数据和函数, ,数据成员:数据成员:成员函数:成员函数是用来对数据成员进行操作成员函数:成员函数是用来对数据成员进行操作v把一组数据和有权调用这些数据的函数封装在一起把一组数据和有权调用这些数据的函数封装在一起, ,组成一组成一种称为种称为“类类( (class)”class)”的数据结构。的数据结构。v即一个类是由一批数据以及对其操作的函数组成的。即一个类是由一批数据以及对其操作的函数组成的。v类可以体现数据的封装性和信息隐蔽。类可以体现数据的封装性和信息

25、隐蔽。在声明在声明StudentStudent类时类时, ,把类中的数据和函数分为两大类:把类中的数据和函数分为两大类:private(private(私有的私有的) ):仅类的成员函数能够使用。:仅类的成员函数能够使用。public(public(公用的公用的) ):类外的语句也可以使用。:类外的语句也可以使用。一般把所有数据指定为私有一般把所有数据指定为私有, ,以实现信息隐蔽。以实现信息隐蔽。v具有具有“类类”类型特征的变量称为类型特征的变量称为“对象对象”(”(object)object)。v程序运行情况如下:程序运行情况如下: v1001 98.5 (1001 98.5 (输入学生输

26、入学生1 1的学号和成绩的学号和成绩) )v1002 76.5 (1002 76.5 (输入学生输入学生2 2的学号和成绩的学号和成绩) )vnum=1001 (num=1001 (输出学生输出学生1 1的学号的学号) )vscore=98.5 (score=98.5 (输出学生输出学生1 1的成绩的成绩) )vnum=1002 (num=1002 (输出学生输出学生2 2的学号的学号) )vscore=76.5 (score=76.5 (输出学生输出学生2 2的成绩的成绩) )1.3 C+1.3 C+对对C C的扩充的扩充v1.3.1 C+1.3.1 C+的输入输出的输入输出v1.3.2 1

27、.3.2 用用constconst定义常量定义常量v1.3.3 1.3.3 函数原型声明函数原型声明v1.3.4 1.3.4 函数的重载函数的重载v1.3.5 1.3.5 函数模板函数模板v1.3.6 1.3.6 有默认参数的函数有默认参数的函数v1.3.7 1.3.7 变量的引用变量的引用v1.3.8 1.3.8 内置函数内置函数v1.3.9 1.3.9 作用域运算符作用域运算符v1.3.10 1.3.10 字符串变量字符串变量v1.3.11 1.3.11 动态分配动态分配/ /撤销内存的运算符撤销内存的运算符newnew和和deletedeletev1.3.12 1.3.12 小结小结1.

28、3.1 C+1.3.1 C+的输入输出的输入输出v用用coutcout进行输出(常称为插入运算符)进行输出(常称为插入运算符)“不再代表左移运算符不再代表左移运算符, ,而是而是“插入插入”endlendl(end of lineend of line)代表回车换行操作。)代表回车换行操作。“”“”运算符的结合顺序是运算符的结合顺序是“自左至右自左至右”每输出一项用一个每输出一项用一个“”符号。符号。可输出任何类型的数据。可输出任何类型的数据。可设定输出所占的列数。可设定输出所占的列数。( (要包含头文件要包含头文件“iomanipiomanip”)”)int a,b;a=3; b=7;cou

29、t*1234567890endl;couta=setw(5)aendl;coutb=setw(10)bendl;vcincin进行输入(常称为提取运算符)进行输入(常称为提取运算符)v例例1.51.5#include #include using namespace std;using namespace std;intint main( ) main( ) coutcoutplease enter your name and age:please enter your name and age:name;name; cincinage;age; coutcoutyour name is na

30、meyour name is nameendlendl; ; coutcoutyour age is ageyour age is ageendlendl; ;return 0;return 0; cin可以进行格式控制可以进行格式控制以及精度控制以及精度控制,将在第将在第7章中详细介绍章中详细介绍 cin输入不需要在本语输入不需要在本语句中指定数据类型。句中指定数据类型。1.3.2 1.3.2 用用constconst定义常变量定义常变量v#define PI 3.1415926#define PI 3.1415926PI PI 不是变量不是变量, ,没有类型没有类型, ,不占有存储空间不占

31、有存储空间vconst float P=3.1415926const float P=3.1415926有类型有类型, ,占存储空间占存储空间, ,有地址有地址程序运行期间不允许改变。程序运行期间不允许改变。1.3.7 1.3.7 变量的引用变量的引用v引用的作用是为一个变量起另一个名字引用的作用是为一个变量起另一个名字, ,以便在需要时可以以便在需要时可以方便、间接的的使用这个变量。方便、间接的的使用这个变量。intint a; a;intint &b=a; &b=a; /变量变量b b是一个整型变量的引用变量是一个整型变量的引用变量, ,它初始化为它初始化为a;a;v注意注意“&”&”是是

32、“引用声明符引用声明符”, ,它并不代表地址它并不代表地址, ,对变量声明一个引用对变量声明一个引用, ,并不另外开辟内存单元并不另外开辟内存单元,b,b和和a a都代都代表一个变量。表一个变量。声明引用时声明引用时, ,必须同时使之初始化必须同时使之初始化, ,且本函数运行期间且本函数运行期间, ,该该引用一直与其代表的变量相联系引用一直与其代表的变量相联系, ,不能再作为其他变量的不能再作为其他变量的别名。别名。int a1,a2;int &b=a1;int &b=a2;1.3.7 1.3.7 变量的引用变量的引用v引用的简单使用引用的简单使用例例1.9 1.9 了解引用和变量的关系了解引

33、用和变量的关系#include #include using namespace std;using namespace std;intint main( ) main( ) intint a=10; a=10;intint &b=a; &b=a; /声明声明b b是是a a的引用的引用a=a*a; a=a*a; /a/a的值变化了的值变化了,b,b的值也应一起变化的值也应一起变化coutcouta ba bendlendl; ; b=b/5; b=b/5; /b/b的值变化了的值变化了,a,a的值也应一起变化的值也应一起变化coutcoutb ab aendlendl; ;return 0;

34、return 0; 1.3.7 1.3.7 变量的引用变量的引用v关于引用的简单说明关于引用的简单说明引用并不是一个独立的数据类型引用并不是一个独立的数据类型, ,它必须与某一种类型的它必须与某一种类型的数据相联系。数据相联系。引用与其所代表的变量共享同一存储单元。引用与其所代表的变量共享同一存储单元。当当&a&a前面有类型说明符时是对引用的说明前面有类型说明符时是对引用的说明, ,没有的话没有的话, ,则则是取地址运算。是取地址运算。可以定义对引用的引用。可以定义对引用的引用。int a;int &b=a;int &b;int a=3;int &b=a;cout&a“ ”&bendl;int

35、 a=3;int &b=a;int &c=b;float a;int &b=a;将引用作为函数参数将引用作为函数参数v变量名作为实参变量名作为实参v传递给形参的是变量的值。传递给形参的是变量的值。例例1.101.10#include #include using namespace std;using namespace std;void void swap(intswap(int a,inta,int b) b) intint temp; temp;temp=a;temp=a; a=b;a=b;b=temp; b=temp; /实现实现a a和和b b的值互换的值互换 intint main

36、( ) main( ) intint i=3,j=5; i=3,j=5;swap(i,jswap(i,j););coutcouti,ji,jendlendl; ; /i/i和和j j的值未互换的值未互换return 0;return 0; 例例1.111.11#include #include using namespace std;using namespace std;void void swap(intswap(int *p1,int *p2) *p1,int *p2) intint temp; temp;temp=*p1;temp=*p1;*p1= *p2;*p1= *p2;*p2=t

37、emp;*p2=temp; intint main( ) main( ) intint i=3,j=5; i=3,j=5;swap(&i,&jswap(&i,&j););coutcouti,ji,jendlendl; ;return 0;return 0; 传递变量的指针传递变量的指针, ,例例1.121.12#include #include using namespace std;using namespace std;void void swap(intswap(int & &a,inta,int &b) &b) intint temp; temp;temp=a;temp=a; a=b;

38、a=b;b=temp;b=temp; intint main( ) main( ) intint i=3,j=5; i=3,j=5;swap(i,jswap(i,j););coutcouti=i j=ji=i j=jendlendl; ;return 0;return 0; 传递变量的别名传递变量的别名v对引用的进一步说明对引用的进一步说明详见课本详见课本P22P22。1.3.10 1.3.10 字符串变量字符串变量v定义字符串变量定义字符串变量string string1;string string1;string string2=“China”;string string2=“China”

39、;#include #include v对字符串变量的赋值对字符串变量的赋值赋值语句赋值:赋值语句赋值: string string strstr=“China”;=“China”;字符串变量赋值:字符串变量赋值:string1=string2;string1=string2;可以对字符串变量中的某一字符进行操作。可以对字符串变量中的某一字符进行操作。string word=“Then”;string word=“Then”;word2=a;word2=a;v字符串变量的输入和输出字符串变量的输入和输出cincinstring1;string1;coutcoutstring2;string2;

40、v字符串变量的运算字符串变量的运算赋值运算符进行字符串复制赋值运算符进行字符串复制加法运算符进行字符串连接。加法运算符进行字符串连接。string str1=“C+”;string str1=“C+”;string str2=“Language”;string str2=“Language”;str1=str1=str1str1+ +str2;+ +str2;用关系运算符进行字符串比较。用关系运算符进行字符串比较。v字符串数组字符串数组string name5;string name5;string string name5=“name5=“Zhang”,”Li”,”Fun”,”Wang”,”

41、TanZhang”,”Li”,”Fun”,”Wang”,”Tan”;”;v例例1.17 1.17 输入输入3 3个字符串个字符串, ,要求按照字母由大到小顺序输出要求按照字母由大到小顺序输出#include #include #include #include using namespace std;using namespace std;intint main() main() string string1,string2,string3,temp;string string1,string2,string3,temp;coutcoutplease input three strings:;

42、 string1string2string3; string1string2string3; /输入输入3 3个字符串个字符串if(string2string3) if(string2string3) temp=string2;temp=string2;string2=string3;string2=string3;string3=temp;string3=temp; /使串使串22串串3 3 if(string1=string2) if(string1=string2) coutcoutstring1 string2 string3string1 string2 string3endlend

43、l/如果串如果串11串串2,2,则串则串11串串22串串3 3 else else if(string1=string3) if(string1=string3) coutcoutstring2 string1 string3string2 string1 string3endlendl; ; /如果串如果串1 1串串2,2,且串且串11串串3,3,则串则串2 2串串11串串3 3else else coutcoutstring2 string3 string1string2 string3 string1endlendl; ; /如果串如果串1 1串串2,2,且串且串1 1串串3,3,则串则

44、串22串串3 3串串3 3return 0;return 0; 1.3.4 1.3.4 函数的重载函数的重载vC+C+允许在同一作用域用同一个函数名定义多个函数允许在同一作用域用同一个函数名定义多个函数v这些函数的参数个数和参数类型不相同,实现不同的功能。这些函数的参数个数和参数类型不相同,实现不同的功能。v即为:函数重载即为:函数重载v例例1.6 1.6 求三个数中最大的数,分别考虑整数、实数、长整数求三个数中最大的数,分别考虑整数、实数、长整数的情况的情况v#include #include vusing namespace std;using namespace std;vintint

45、max(intmax(int a,inta,int b,intb,int c) c) /求求3 3个整数中的最大者个整数中的最大者v if (ba) a=b;if (ba) a=b;v if (ca) a=c;if (ca) a=c;v return a; return a; v vfloat float max(floatmax(float a,floata,float b, float c) b, float c) /求求3 3个实数中的最大者个实数中的最大者v if (ba) a=b;if (ba) a=b;v if (ca) a=c;if (ca) a=c;v return a; re

46、turn a; v vlong long max(longmax(long a,longa,long b,longb,long c) c) /求求3 3个长整数中的最大者个长整数中的最大者v if (ba) a=b;if (ba) a=b;v if (ca) a=c;if (ca) a=c;v return a;return a;v vintint main( ) main( )v intint a,b,ca,b,c; float ; float d,e,fd,e,f; long ; long g,h,ig,h,i; ;v cincinabc; abc; v cincindef;def;v c

47、incinghi;ghi;v intint m; m;v m= m= max(a,b,cmax(a,b,c); ); /函数值为整型函数值为整型v coutcout max_imax_i=m=mendlendl; ;v float n;float n;v n=n=max(d,e,fmax(d,e,f); ); /函数值为实型函数值为实型v coutcoutmax_fmax_f=n=nendlendl; ;v long long intint p; p;v p=p=max(g,h,imax(g,h,i); ); /函数值为长整型函数值为长整型v coutcoutmax_lmax_l=p=pend

48、lendl; ;v return 0;return 0;v v重载函数的参数个数也可不同重载函数的参数个数也可不同v例例1.7 1.7 用一个函数求用一个函数求2 2个整数或者个整数或者3 3个整数中的最大者个整数中的最大者v#include #include vusing namespace std;using namespace std;vintint max(intmax(int a,inta,int b,intb,int c) c) /求求3 3个整数中的最大者个整数中的最大者v if (ba) a=b;if (ba) a=b;v if (ca) a=c;if (ca) a=c;v r

49、eturn a;return a;v vintint max(intmax(int a, a, intint b) b) /求两个整数中的最大者求两个整数中的最大者v if (ab) return a;if (ab) return a;v else return b;else return b;v vintint main( ) main( )v intint a=7,b=-4,c=9; a=7,b=-4,c=9;v coutcoutmax(a,b,cmax(a,b,c)endlendl; ; /输出输出3 3个整数中的最大者个整数中的最大者v coutcoutmax(a,bmax(a,b)e

50、ndlendl; ; /输出两个整数中的最大者输出两个整数中的最大者v return 0;return 0;v 1.5 1.5 关于关于C+C+上机实践上机实践v在了解了在了解了C+C+语言的初步知识后语言的初步知识后, ,读者最好尽快在计算机上编读者最好尽快在计算机上编译和运行译和运行C+C+程序程序, ,以加深对以加深对C+C+程序的认识程序的认识, ,并初步掌握并初步掌握C+C+的上机操作。的上机操作。v读者可以使用不同的读者可以使用不同的C+C+编译系统编译系统, ,在不同的环境下编译和运在不同的环境下编译和运行一个行一个C+C+程序。但是需要强调的是程序。但是需要强调的是, ,我们学

51、习的是我们学习的是C+C+程序程序设计设计, ,应当掌握的是标准应当掌握的是标准C+,C+,而不应该只了解某一种而不应该只了解某一种“方言方言化化”的的C+C+。不应当只会使用一种不应当只会使用一种C+C+编译系统编译系统, ,只能在一种只能在一种环境下工作环境下工作, ,而应当能在不同的而应当能在不同的C+C+环境下运行自己的程序环境下运行自己的程序, ,并且了解不同的并且了解不同的C+C+编译系统的特点和使用方法编译系统的特点和使用方法, ,在需要时在需要时能将自己的程序方便地移植到不同的平台上。能将自己的程序方便地移植到不同的平台上。v在本书的参考书在本书的参考书C+C+程序设计题解与上

52、机指导一书中简程序设计题解与上机指导一书中简单介绍了在单介绍了在Visual C+ 6.0Visual C+ 6.0和和GCCGCC两种典型的环境下运行两种典型的环境下运行C+C+程序的方法。程序的方法。v请读者选择一种请读者选择一种( (如能做到两种更好如能做到两种更好) ) C+C+编译系统编译系统, ,在该环在该环境下输入和运行习题中的程序境下输入和运行习题中的程序, ,掌握上机的方法和步骤。掌握上机的方法和步骤。1.3 1.3 C+C+程序的构成和书写形式程序的构成和书写形式vC+C+程序的结构和书写格式归纳如下:程序的结构和书写格式归纳如下: v(1 1) 一个一个C+C+程序可以由

53、一个程序单位或多个程序单位构程序可以由一个程序单位或多个程序单位构成。每一个程序单位作为一个文件。在程序编译时成。每一个程序单位作为一个文件。在程序编译时, ,编译系编译系统分别对各个文件进行编译统分别对各个文件进行编译, ,因此因此, ,一个文件是一个编译单一个文件是一个编译单元。元。v(2) (2) 在一个程序单位中在一个程序单位中, ,可以包括以下几个部分:可以包括以下几个部分: 预处理命令。上节预处理命令。上节4 4个程序中都包括个程序中都包括# #includeinclude命令。命令。 全局声明部分全局声明部分( (在函数外的声明部分在函数外的声明部分) )。在这部分中包。在这部分

54、中包括对用户自己定义的数据类型的声明和程序中所用到的括对用户自己定义的数据类型的声明和程序中所用到的变量的定义。变量的定义。 函数。函数是实现操作的部分函数。函数是实现操作的部分, ,因此函数是程序中必因此函数是程序中必须有的和最基本的组成部分。每一个程序必须包括一个须有的和最基本的组成部分。每一个程序必须包括一个或多个函数或多个函数, ,其中必须有一个其中必须有一个( (而且只能有一个而且只能有一个) )主函数主函数( (mainmain函数函数) )。v但是并不要求每一个程序文件都必须具有以上但是并不要求每一个程序文件都必须具有以上3 3个部分个部分, ,可以可以缺少某些部分缺少某些部分(

55、 (包括函数包括函数) )。v(3) (3) 一个函数由两部分组成一个函数由两部分组成: : 函数首部函数首部, ,即函数的第一行。包括函数名、函数类型、即函数的第一行。包括函数名、函数类型、函数属性、函数参数函数属性、函数参数( (形参形参) )名、参数类型。名、参数类型。一个函数名后面必须跟一对圆括号一个函数名后面必须跟一对圆括号, , 函数参数可以缺函数参数可以缺省省, ,如如intint main( ) main( )。 函数体函数体, ,即函数首部下面的大括号内的部分。如果在即函数首部下面的大括号内的部分。如果在一个函数中有多个大括号一个函数中有多个大括号, ,则最外层的一对则最外层

56、的一对 为函数体为函数体的范围。的范围。函数体一般包括函数体一般包括: :局部声明部分局部声明部分 ( (在函数内的声明部分在函数内的声明部分) )。包括对本。包括对本函数中所用到的类型、函数的声明和变量的定义。函数中所用到的类型、函数的声明和变量的定义。对数据的声明既可以放在函数之外对数据的声明既可以放在函数之外( (其作用范围是其作用范围是全局的全局的) ), ,也可以放在函数内也可以放在函数内( (其作用范围是局部的其作用范围是局部的, ,只在本函数内有效只在本函数内有效) )。执行部分。由若干个执行语句组成执行部分。由若干个执行语句组成, ,用来进行有关用来进行有关的操作的操作, ,以

57、实现函数的功能。以实现函数的功能。v(4 4) 语句包括两类。一类是声明语句语句包括两类。一类是声明语句, ,另一类是执行语句。另一类是执行语句。 C+C+对每一种语句赋予一种特定的功能。语句是实现操作的对每一种语句赋予一种特定的功能。语句是实现操作的基本成分基本成分, ,显然显然, ,没有语句的函数是没有意义的。没有语句的函数是没有意义的。C+C+语句必语句必须以分号结束。须以分号结束。v(5) (5) 一个一个C+C+程序总是从程序总是从mainmain函数开始执行的函数开始执行的, ,而不论而不论mainmain函函数在整个程序中的位置如何。数在整个程序中的位置如何。v(6) (6) 类

58、类( (class)class)是是C+C+新增加的重要的数据类型新增加的重要的数据类型, ,是是C+C+对对C C的的最重要的发展。有了类最重要的发展。有了类, ,就可以实现面向对象程序设计方法就可以实现面向对象程序设计方法中的封装、信息隐蔽、继承、派生、多态等功能。在一个中的封装、信息隐蔽、继承、派生、多态等功能。在一个类中可以包括数据成员和成员函数类中可以包括数据成员和成员函数, ,他们可以被指定为私有他们可以被指定为私有的的( (private)private)和公用的和公用的( (public)public)属性。私有的数据成员和成属性。私有的数据成员和成员函数只能被本类的成员函数所

59、调用。员函数只能被本类的成员函数所调用。v(7)(7)C+C+程序书写格式自由程序书写格式自由, ,一行内可以写几个语句一行内可以写几个语句, , 一个语一个语句可以分写在多行上。句可以分写在多行上。C+C+程序没有行号程序没有行号, ,也不像也不像FORTRANFORTRAN或或COBOLCOBOL那样严格规定书写格式那样严格规定书写格式( (语句必须从某一列开始书写语句必须从某一列开始书写) )。v(8) (8) 一个好的、有使用价值的源程序都应当加上必要的注释一个好的、有使用价值的源程序都应当加上必要的注释, ,以增加程序的可读性。以增加程序的可读性。C+C+还保留了还保留了C C语言的

60、注释形式语言的注释形式, ,可可以用以用“/*/”“/*/”对对C+C+程序中的任何部分作注释。在程序中的任何部分作注释。在“/*”“/*”和和“*/”“*/”之间的全部内容作为注释。之间的全部内容作为注释。v用用“/”“/”作注释时作注释时, ,有效范围只有一行有效范围只有一行, ,即本行有效即本行有效, ,不能跨不能跨行。而用行。而用“/*/”“/*/”作注释时有效范围为多行。只要在作注释时有效范围为多行。只要在开始处有一个开始处有一个“/*”“/*”, ,在最后一行结束处有一个在最后一行结束处有一个“*/”“*/”即可。即可。因此因此, ,一般习惯是:一般习惯是: 内容较少的简单注释常用

61、内容较少的简单注释常用“/”“/”, ,内容内容较长的常用较长的常用“/*/ ”“/*/ ”。1.4 1.4 C+C+程序的编写和实现程序的编写和实现v一个程序从编写到最后得到运行结果要经历以下一些步骤。一个程序从编写到最后得到运行结果要经历以下一些步骤。v1. 1. 用用C+C+语言编写程序语言编写程序v用高级语言编写的程序称为用高级语言编写的程序称为“源程序源程序”(source source programprogram)。)。C C+的源程序是以的源程序是以. .cppcpp作为后缀的作为后缀的( (cppcpp是是c plus c plus plusplus 的缩的缩写写) )。v2

62、. 2. 对源程序进行编译对源程序进行编译v为了使计算机能执行高级语言源程序为了使计算机能执行高级语言源程序, ,必须先用一种称为必须先用一种称为“编译器编译器( (complier)”complier)”的软件的软件( (也称编译程序或编译系统也称编译程序或编译系统) ), ,把把源程序翻译成二进制形式的源程序翻译成二进制形式的“目标程序目标程序( (object object program)”program)”。v编译是以源程序文件为单位分别编译的。目标程序一般以编译是以源程序文件为单位分别编译的。目标程序一般以. .objobj或或. .o o作为后缀作为后缀( (object obj

63、ect 的缩写的缩写) )。编译的作用是对源程。编译的作用是对源程序进行词法检查和语法检查。编译时对文件中的全部内容序进行词法检查和语法检查。编译时对文件中的全部内容进行检查进行检查, ,编译结束后会显示出所有的编译出错信息。一般编译结束后会显示出所有的编译出错信息。一般编译系统给出的出错信息分为两种编译系统给出的出错信息分为两种, ,一种是错误一种是错误( (error)error);一种是警告一种是警告( (warning) warning) 。v3. 3. 将目标文件连接将目标文件连接v在改正所有的错误并全部通过编译后在改正所有的错误并全部通过编译后, ,得到一个或多个目标得到一个或多个

64、目标文件。此时要用系统提供的文件。此时要用系统提供的“连接程序连接程序( (linker)”linker)”将一个将一个程序的所有目标程序和系统的库文件以及系统提供的其他程序的所有目标程序和系统的库文件以及系统提供的其他信息连接起来信息连接起来, ,最终形成一个可执行的二进制文件最终形成一个可执行的二进制文件, ,它的后它的后缀是缀是. .exe,exe,是可以直接执行的。是可以直接执行的。v4. 4. 运行程序运行程序 v运行最终形成的可执行的二进制文件运行最终形成的可执行的二进制文件(.(.exeexe文件文件) ), ,得到运行得到运行结果。结果。v5. 5. 分析运行结果分析运行结果v如果运行结果不正确如果运行结果不正确, ,应检查程序或算法是否有问题。应检查程序或算法是否有问题。v图图1.11.1

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号