第10章__类库和C++的标准模板库STL.ppt_第1页
第10章__类库和C++的标准模板库STL.ppt_第2页
第10章__类库和C++的标准模板库STL.ppt_第3页
第10章__类库和C++的标准模板库STL.ppt_第4页
第10章__类库和C++的标准模板库STL.ppt_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、c面向对象的编程教育内容第1章c概要第2章类和对象第3章面向对象的编程概要第4章进一步的学习类和对象第5章堆和复制构造函数第6章继承性派生类第7章运算符重负荷第8章虚函数和多态性第9章模板第10章类活动库STL第11章输入输出流程第12章异常第10章类库和c的标准模板库STL,10.1类库的概念10.2 C的标准模板库STL,10.1类库的概念,1.1.1什么是类库? 1.1.2如何分析和利用类库? 1.1.3类库的特点1.1.4类库是面向对象软件开发环境的核心,什么是10.1.1类库? 中的组合图层性质变更选项。 类库是类的集合,描述了多个类别之间的关系。 为了便于程序员的开发,系统提供了可

2、重复使用的代码。 具体表现为一系列的类,通过建立相互的继承关系来形成类库,作为类向用户提供再利用。 什么是类库? (继续)为了建立和实现面向对象的程序,使用类和类库来获得需要的对象,即类的实例。 因此,类库是预定义的面向对象的库。类库的示例,cstandardstllibrarymicrosoftvisualc系统提供的MFC类库。 mfcmicrosoftfoundationclassborlandc系统提供的OWL类库。 C Builder系统提供的VCL类库。 类库提供软件重用的基础,OOP提供的继承机制,使得程序员能够基于现有的类定义自己需要的新类,实现软件模块的重用。 程序员的分工进

3、一步细分,在面向对象的编程残奥下,程序员的团队可以分为两类,它们都是以类为工作对象的一个团队主要是设置修订类和类库,另一个团队主要是类如何分析和利用10.1.2类库?程序员必须了解类库的组织情况,才能发挥面向对象的方法的优势。 您可以通过联机帮助或类库参考手册(类库工作手册)了解软件开发系统提供的类库的类层次结构。 可能需要的类及其父类的属性和方法。 使用联机文档中的示例学习如何使用类。 测量应用程序编程能力的标准变化,结构化编程时代的标准:每天编制的源代码行数,程序结构明确。 面向对象的编程时代标准:测量应用程序编程人员的生产率,看他是否知道如何最大限度地发挥现有类库的功能,是否有能力使现有

4、类库与新问题紧密匹配,以及他必须另行写作10.1.3根据类库的特征、通用性、可扩展性概念和层次性、灵活性、通用性、再利用目的,选择具有广泛适用性的作为类库的内容,进行全面考虑,适用于多种情况。 在可扩展性和软件开发期间,可以添加新的类以供以后使用。 如果要改进现有的类库,则修改不会导致对外部(应用程序系统)软件的更改,除非对接口进行了更改。概念和层次性、类库内各类的概念是明确易懂、具有某一共同性质的类作为基类。 设计班需要明确的目标。 好的班级应该容易理解和使用。 10.1.4类库是面向对象的软件开发环境的核心,OOP开发方法只有基于软件重用的思想,才能真正提高软件开发的效率和质量。 类库为软

5、件的重用提供了基础,编程不必从零开始。 类库与传统的子例程库(函数库)不同,与子例程库相比,性能显着提高。10.2 C标准模板库STL,10.2.1命名空间namespace配置文件10.2.2 C标准库配置10.2.3标准模板库STL配置文件10.2.4标准模板库STL应用,10.2.3 如果在一个程序中同时使用两个类库,则编译器compiler可以检测名称冲突、名称冲突的损害同一源文件(编译器单元)中发生的名称冲突。 redefined symbols (ambiguous symbol ) (参照example 10 _2)的不同编译单元(目标文件等)之间的名称。名称冲突的原因是c采用单

6、一全局名称空间(参照) 。 在这个单一空间中,如果两个类、两个变量或两个函数的名称完全相同,则会发生名称冲突。作用域概念scope、局部作用域local scopes :块作用域函数作用域文件作用域全局作用域global scopes全局标识符:全局变量名、全局函数名、全局类型名等全局命名空间namespace,使用命名空间分隔全局命名空间的解决方案是在程序中定义两个不同的命名空间。 服务命名空间namespace (继续),该命名空间用于解决在c中诸如变量、函数等的命名冲突。 程序规模越大,命名空间越有用。 larger a program is,themoreusefulnamespace

7、space是名称空间、名称空间、名称空间的示例和名称空间的名称、int main() cout n Hello、myown 133603360用户名称.和goodbye! n; 我是英雄233603360用户名称.和goodbye! n; 返回0; (请参见example10_3),使用命名空间限制符myown1访问变量user_name,使用命名空间限制符myown2访问变量user_name,int main ()使用命名空间myown1 n;/使用名称空间myown 2; 我是英雄23360336

8、0用户名称.和goodbye! n; 返回0; (请参见example10_4),使用命名空间限制符myown2访问变量user_name,创建命名空间并创建namespacenamespacename/,而无需使用命名空间限制符myown1访问变量user_name 命令using的范围从声明的位置开始,一直持续到当前范围scope结束。 如果使用一个命名空间,则不复盖当前命名空间。 using namespace的有效范围,int main() using namespace myown1; 求助,用户名.和goodbye! n; 使用名称空间myown 2; 求助,用户名.和goodby

9、e! n; 返回0;命名空间总结一、命名空间解决了c的命名冲突问题二、注意命名空间namespace的格式,与类class相似或相同。 三、命名空间名称必须是唯一的。 否则,必须在它们之外再加上一个命名空间。 也就是说,命名空间和类一样嵌套4,可以使用同名的类,声明实例时必须附加命名空间的范围“命名空间命名:类名”。、10.2.2 C标准库的配置、基本运行时库例如动态内存分配、支持运行时类型信息RTTI C语言的标准库标准模板库(STL )输入输出流库(I/o流)和字符串数字修正c标准库名称空间,# inng int main () STD :3360计算帮助,世界! n; c的标准库定义在命

10、名空间std中,标准库是命名空间std,# include # includeusingnamespacestd; /在std中引入此编译指示的所有符号/使用此编译指示的using namespace std; 如果在c标准类库中定义的名称在本程序中不能使用/的话,将看不到iostream、string等c标准类,导致编译错误。10.2.3标准模板库STL概述、包含标准模板库(STL )通用算法和数据结构的通用库STL的核心内容包括容器算法迭代器、STL中的容器类、容器的三个基本组件,例如向量vector线性表list队列映射集合set字符串string (还有其他容器类,可以引用其他书籍或在

11、线手册),以及公用算法替换replace ()合并merge迭代器允许访问容器中的元素,就像使用指针访问数组一样。 在STL中定义了5种迭代器:随机接入迭代器RandIter双向迭代器BiIter前向迭代器ForIter输入迭代器InIter输出迭代器OutIter,STL的简单使用方法是:在实际的面向c对象的编程中,将STL库STL是一个非常庞大而复杂的类库,现在很多专家都在介绍STL。 我们用简单的实例介绍了最基本的应用方法。 10.2.4标准模板库STL应用示例、向量vector线性表列表队列映射映射字符串string、1 .向量vector、向量vector vector iv等vec

12、tor类对象可以简单地声明向量cv (5); 向量cv (5,x ); 向量iv2(); vector应用例,/accessavectorusinganiterator.# include # includeusingnamespacestd; int main ()向量v;/创建零长度向量入口; 向量/向量(I=0)。 i10; (一)推进后退; vector是实例(续),/canaccessvectorcontentsusingsubscriptingfor (I=0; I :3360迭代器p=v.begin (); 威尔!=v .结束() ) cout * p; p; 返回0; 2 .线

13、性表list和线性表list类定义了双向线性表,也称为双向链表。 List类仅支持顺序访问。 以下c程序使用实例化链表list类模板创建存储字符的链表,使用类模板的排序方法sort ()进行排序,输出排序的字符。 线性表列表使用实例(续)/sorta list.# include # includeusingnamespacestd。 int main() int i; 列表列表; /createalistofrandomcharactersfor (I=0)。 i10; (I )推进后退(a (rand () & ); 线性表列表应用示例(续),cout :3360迭代器p=lst.begin (); 威尔!=lst.end() cout *p; p; cout endl结束符号; /sort the list lst.sort ();线性表列表应用例(续)、cout Sorted contents: p=lst.begin (); 威尔!=lst.end() cout *p; p; 返回0; 3 .映射map,映射map类以定义关联的容器,并使用容器中唯一的关键字映射对应的值。 map类对象是一组关键字值的匹配对。 map的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论