已阅读5页,还剩56页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.,C+面向对象程序设计教学内容,第1章C+概述第2章类和对象第3章面向对象程序设计概述第4章进一步学习类和对象第5章堆与复制构造函数第6章继承性:派生类第7章运算符重载第8章虚函数和多态性第9章模板第10章类库和C+的标准模板库STL第11章输入输出流第12章异常处理,.,第10章类库和C+的标准模板库STL,10.1类库的概念10.2C+的标准模板库STL,.,10.1类库的概念,1.1.1什么是类库(classlibrary)?1.1.2如何分析、利用类库?1.1.3类库的特点1.1.4类库是面向对象的软件开发环境的核心,.,10.1.1什么是类库?,类库是类的集合,并且给出了多种类之间的关系描述。为了便于程序员的开发工作,系统提供了一批可供重用的代码。(源程序代码)具体表现为一组类,通过建立彼此间的继承关系形成类库,以类的形式提供给用户重用。,.,什么是类库?(续),在设计和实现面向对象的程序的时候,要用类和类库,才能得到所需的对象,即类的实例。所以,类库是一种预定义的面向对象的程序库。,.,类库的例子,C+StandardSTLlibraryMicrosoftVisualC+系统中提供的MFC类库。MFCMicrosoftFoundationClassBorlandC+系统中提供的OWL类库。C+Builder系统中提供的VCL类库。,.,类库为软件重用提供基础,OOP提供的继承机制使得程序员可以在已有类的基础上定义自己需要的新类,从而实现了软件模块的重用。,.,程序员分工进一步细化,在面向对象的程序设计范型之下,程序员的队伍可能要分为两种,它们都以类作为工作对象一个队伍主要是设计类和类库,另一个队伍主要是使用类来设计应用程序。分工细化就意味着进步,.,10.1.2如何分析、利用类库?,要想发挥面向对象方法的优势,程序员必须知道类库的组织情况。我们可以通过联机帮助或类库参考手册(类库工作手册)了解:软件开发系统提供的类库的类层次结构。可能需要用到的类及其父类的属性和方法。通过联机文档提供的例子学习有关类的使用方法。,.,衡量应用程序员能力的标准的变化,结构化程序设计时代的标准:每天编写的源代码行数,程序结构清晰。面向对象程序设计时代的标准:衡量一个应用程序员的生产力,要看他是否知道如何来最好地发挥已有类库的功能,要看他有没有能力将已有的类库与新问题紧密的匹配起来,还要看他不得不另外编写的代码是不是最少。,.,10.1.3类库有什么特点,通用性可扩充性概念性与层次性灵活性,.,通用性,基于重用的目的,选择具有广泛适用性的东西作为类库的内容,并经过全面的考虑,使之适用于较多的情况。,.,可扩充性,在软件开发过程中,可以添加新的类供以后使用。对已有的类库进行改进时,只要保持接口不变,修改不会引起外部(即应用系统)软件的变化。,.,概念性与层次性,类库中的每个类的概念要明确,易于理解,将具有某些共同性质的类作为基类。设计类要有一个明确的目标。一个好的类应该是容易理解和使用的。,.,10.1.4类库是面向对象的软件开发环境的核心,OOP开发方法只有基于软件重用的思想,才能真正提高软件开发的效率和质量。类库为软件重用提供了基础,程序设计不必再从零开始。类库不同于传统的子程序库(函数库),它的性能大大优于子程序库。,.,10.2C+的标准模板库STL,10.2.1名字空间namespace简介10.2.2C+标准库的构成10.2.3标准模板库STL简介10.2.4标准模板库STL应用举例,.,10.2.1名字空间namespace简介,日常生活中人名相同引起的名字冲突;C+程序中出现相同的名字引起的冲突:容器类库中有一个List类窗口类库中有一个List类如果一个程序中要同时使用这两个类库就会发生名字冲突,.,名字冲突的危害,在同一个源文件(编译单元)中出现的名字冲突可以由编译器compiler检查出来:RedefinedSymbols(ambiguoussymbol)在不同编译单元(如目标文件)之间的名字冲突可能由链接器Linker检查出来:Identifiermultiplydefined也可能导致错误链接,从而产生运行时错误runtimeerror。,.,名字冲突的原因,C+中采用的是单一的全局名字空间(参见)。在这单一的空间中,如果有两个类、两个变量或两个函数的名字完全相同,就会出现名字冲突。,.,作用域的概念scope,局部作用域localscopes:块作用域函数作用域文件作用域全局作用域globalscopes全局标识符号:全局变量名、全局函数名、全局类型名等等全局名字在整个程序范围内有效,.,名字空间namespace,使用名字空间来划分全局名字空间可以避免名字冲突。解决的办法就是将程序中相同的名字定义在两个不同的名字空间中。,.,名字空间namespace(续),名字空间就是为解决C+中的变量、函数等的名字冲突而服务的。程序规模越大,名字空间就越有用。Thelargeraprogramis,space又译作:命名空间、名称空间,.,名字空间的例子,/两个在不同命名空间中定义的名字相同的变量namespacemyown1stringuser_name=myown1;namespacemyown2stringuser_name=myown2;,名字空间的名字,.,intmain()coutnHello,myown1:user_name.andgoodbye!n;coutnHello,myown2:user_name.andgoodbye!n;return0;,用命名空间限制符myown1访问变量user_name,用命名空间限制符myown2访问变量user_name,.,intmain()usingnamespacemyown1;coutnHello,user_name.andgoodbye!n;/usingnamespacemyown2;coutnHello,myown2:user_name.andgoodbye!n;return0;,用命名空间限制符myown2访问变量user_name,无需用命名空间限制符myown1访问变量user_name,.,创建名字空间,namespacenamespacename/declarationanddefinitions,可见,创建名字空间与定义一个类很相似,实际上类名就是一个名字空间的名字。,.,usingnamespace,关键字using将一个名字空间变为可见,实际上只是将该名字空间的名字添加到当前名字空间中。命令using的作用域从其声明之处开始并持续到当前作用域scope结束。在使用一个名字空间时,并不会覆盖当前的名字空间。,.,usingnamespace的有效范围,intmain()usingnamespacemyown1;coutnHello,user_name.andgoodbye!n;usingnamespacemyown2;coutnHello,user_name.andgoodbye!n;return0;,.,名字空间小结,一、名字空间解决了C+的名字冲突问题二、注意名字空间namespace的书写格式,和类class相似或相同。三、名字空间名必需是唯一的,否则必需在它们的外面再套上一层名字空间,亦即名字空间可以和类一样的嵌套使用四、同名类在声明实例时必需加上名字空间作用域符“名字空间名:类名”五、不一定只有类才可加上名字空间的外套,其它如,局部变量、函数等都可加上名字空间外套。,.,10.2.2C+标准库的构成,基本的运行库例如支持动态内存分配、运行时类型信息RTTIC语言的标准库标准模板库(STL)输入输出流类库(I/OStream)和字符串数值计算库例如支持复数的计算,.,C+标准库名字空间,#includeusingnamespacestd;intmain()std:coutHello,world!n;,C+的标准库定义在名字空间std之中.,.,标准库定义在名字空间std,#include#includeusingnamespacestd;/该编译指示引入std里的所有符号/使用该编译指示usingnamespacestd;在C+标准类库中定义的名字在本程序中可以使用/否则,iostream,string等c+标准类就不可见了,编译就会出错。,.,10.2.3标准模板库STL简介,StandardTemplateLibrary(STL)包含常用算法和数据结构的通用库STL的核心内容是3个基本组件:容器算法迭代器,.,STL中的容器类,容器(container)类是用来保存其它对象的,STL中定义了多种不同类型的容器,例如:向量vector线性表list队列queue映射map集合set字符串string(还有其他容器类,可以参考其他书籍或者查阅联机手册),.,常用算法,排序sort()查找find()替换replace()合并merge()反序reverse()统计count()其他等等算法,.,迭代器(iterator),迭代器是一种类似于指针的对象。可以使用迭代器来访问容器中的元素,就像我们使用指针来访问数组一样。STL中定义了五种迭代器:随机访问迭代器RandIter双向迭代器BiIter前向迭代器ForIter输入迭代器InIter输出迭代器OutIter,.,STL的简单使用方法,在实际的C+面向对象程序设计中,STL库将起着举足轻重的作用。STL是一个非常庞大、复杂的类库目前已经有不少专著介绍STL我们通过简单的实例介绍最基本的应用方法,.,10.2.4标准模板库STL应用举例,向量vector线性表list队列queue映射map字符串string,.,1.向量vector,向量vector类可用来支持动态数组,动态数组是指可以根据需要改变大小的数组。可以很容易地声明一个vector类对象,例如:vectoriv;vectorcv(5);vectorcv(5,x);vectoriv2(iv);,.,vector应用实例,/Accessavectorusinganiterator.#include#includeusingnamespacestd;intmain()vectorv;/createzero-lengthvectorinti;/putvaluesintoavectorfor(i=0;i10;i+)v.push_back(A+i);,.,vector应用实例(续),/canaccessvectorcontentsusingsubscriptingfor(i=0;i:iteratorp=v.begin();while(p!=v.end()cout*p;p+;return0;,.,2.线性表list,线性表list类定义了双向的线性表,又可称为双向链表。List类只支持顺序访问。下面的C+程序通过实例化链表list类模板建立了一个保存字符的链表,接着使用类模板的排序方法sort()进行排序,然后输出经过排序后的字符。,.,线性表list应用实例(续),/Sortalist.#include#include#includeusingnamespacestd;intmain()inti;listlst;/createalistofrandomcharactersfor(i=0;i10;i+)lst.push_back(A+(rand()%26);,.,线性表list应用实例(续),cout:iteratorp=lst.begin();while(p!=lst.end()cout*p;p+;coutendlendl;/sortthelistlst.sort();,.,线性表list应用实例(续),coutSortedcontents:;p=lst.begin();while(p!=lst.end()cout*p;p+;return0;,.,3.队列queue,队列(queue)是一个先进先出(FIFO:FirstInFirstOut)的数据结构,在程序设计中经常使用。对一个队列常用的操作有,在队列尾增加一个元素、在队列头取一个元素以及测试队列是否为空、是否为满等操作。,.,队列queue的应用实例,UsingqueueclassintheStandardC+Library,Instantiateaqueueforstringsanddemonstratethefollowingfunctionsinmain()toshowthatyouknowhowtousethisclass:queue:push()queue:pop()queue:empty()queue:front()queue:back()queue:size(),.,#include#include#includeusingnamespacestd;voidmain()queuestr_queue;str_queue.push(string1);str_queue.push(string2);str_queue.push(string3);,.,coutthesizeofthequeueis:str_queue.size()endl;coutthefrontonestr_queue.front()endl;coutthebackonestr_queue.back()endl;str_queue.pop();str_queue.pop();str_queue.pop();if(str_queue.empty()coutthequeueisempty!s;map:iteratorp;p=m.find(s);if(p!=m.end()coutsecond;elsecoutWordnotinmap.n;return0;,.,5.字符串类string,C+提供了两种处理字符串的方法:以空字符0结尾的字符数组容器类string类的对象(标准库中的string类)使用标准库中的string类的三个理由:一致性(字符串定义为一种数据类型)方便性(可以使用标准的运算符)安全性(不会出现数组越界错误),.,字符串类string应用实例,/Demonstrateinsert(),erase(),andreplace().#include#includeusingnamespacestd;intmain()stringstr1(Thisisatest);stringstr2(ABCDEFG);coutInitialstrings:n;coutstr1:str1endl;coutstr2:str2nn;,.,字符串类string应用实例(续),/demonstrateinsert()coutInsertstr2intostr1:n;str1.insert(5,str2);coutstr1nn;/demonstrateerase()coutRemove7charactersfromstr1:n;str1.erase(5,7);coutstr1nn;,.,字符串类string应用实例(续),/demonstratereplacecou
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 内蒙古自治区通辽市科左后旗甘旗卡第二高级中学2025-2026学年高二上化学期末检测模拟试题含解析
- 重庆三峡医药高等专科学校《建筑施工组织及BIM应用》2024-2025学年第一学期期末试卷
- 2025-2026学年上海市金山区金山中学物理高二第一学期期末教学质量检测试题含解析
- 疾病预防控制策略
- 河南省九师.商周联盟2025-2026学年生物高一第一学期期末达标检测试题含解析
- 血液透析并发症护理培训
- 艾滋病综合管理方案
- 精神科抑郁症患者心理疏导方法
- 眼科白内障手术后护理方案
- 康复医学科脊柱骨折康复护理方案
- 加油站安全生产信息管理制度
- 国家二级MSOffice高级应用机试(操作题)模拟试卷3(共156题)
- 华为ICT大赛中国区(实践赛)-昇腾AI赛道往年考试真题(附答案)
- 工商银行讨论面试题目及答案
- 2025中铁信息工程集团沈阳分公司招聘笔试历年常考点试题专练附带答案详解2套试卷
- 2025年国家工作人员学法用法考试题(附答案)
- 深圳市建设报建流程及资料准备指引
- 房颤合并冠心病的抗凝指南2025
- 人防防化施工方案
- 2025年南陵县县属国有企业公开招聘工作人员55人笔试考试参考试题及答案解析
- 2025年农商银行面试题目及答案
评论
0/150
提交评论