华为C++中级培训ppt课件_第1页
华为C++中级培训ppt课件_第2页
华为C++中级培训ppt课件_第3页
华为C++中级培训ppt课件_第4页
华为C++中级培训ppt课件_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

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

文档简介

1、华为C+中级培训员工培训中心2005年7月1日课程内容第一章: 类第二章:接 口第三章:运算符重载第四章:模 板第一章: 类根本概念类的根本特性类的运用的特例根本概念 namespace Class names Class membersMember FunctionsStatic Member FunctionsUnionsC+ Bit FieldsNested Class DeclarationsType Names in Class ScopeMultiple Base ClassesVirtual FunctionsAbstract ClassesControlling Access

2、to Class Membersprivate Membersprotected Memberspublic MembersAccess Specifiers for Base Classes,priavte,public、protectedFriends ConstructorsDestructorsConversion Functionsthe new operator and the delete operatorCopying Constructor FunctionsInterface类的根本特性构造函数与拷贝构造函数静态成员与友元组合与承继构造函数与拷贝构造函数C+规定与类同名的函

3、数就是拷贝构造函数默许拷贝构造函数在类定义中假设没有提供本人的拷贝构造函数,那么C+提供一个默许的构造函数,其拷贝战略是逐个成员依次拷贝。深拷贝和浅拷贝默许拷贝构造函数均是浅拷贝但是一个类能够拥有其它资源,如其构造函数分配了一个堆内存,析构函数释放了这个内存,那么此时就需求进展深拷贝了深拷贝不能依赖编译器实现静态成员与友元静态成员运用static 声明,在内存中永远只需一份实例是类的对象所共有的静态成员变量可以被成员函数访问,但静态成员函数只能访问静态成员变量友元是为了一个普通函数直接访问一个类的维护甚至是私有成员的机制组合与承继C + +最重要的性能之一是代码重用简单地创建一个包含已存在的类

4、对象的新类,这称为组合,has-a 关系创建一个新类作为一个已存在类的类型,采取这个已存在类的方式,对它添加代码,但不修正它。称为承继,具有is-a关系,承继具有单一承继和多承继类的运用的特例承继中的向上映射与切片问题多承继中发生的菱形缺陷this跳转承继中的向上映射与切片问题假设有 class B:public A;B b;A a = b;这就是切片景象而B *pb = new B;A *pa = pb;那么不会发生切片,由于这只是指针的赋值而不涉及到切片景象多承继中发生的菱形缺陷菱形缺陷导致的缘由:发生了菱形承继,如右图两个缺陷:子对象重叠向上映射的二义性 处理方法:修正多承继关系为单一承

5、继关系或者是组合关系进展虚承继this跳转如右图承继关系对于一个曾经实例化B类的对象 bObject,永远有B*&bObject =(A*)&bObject 成立 但是在多承继的世界内,上面的等式就不能恒成立,对象的同一性遭到了挑战。特别的是,在多承继世界内假设左下的菱形关系存在情况下,假设对于曾经实例化B类的对象bObject; Base*A1*&bObject != Base*A2*&bObject 成立,当这种事情发生的时候我们就只能特殊处置了。这种情况在COM运用中处处都会发生 。 第二章:接 口根本知识根本特性接口运用的特例运用举例根本概念ClassVirtual functions

6、Pure virtual functionsAbstract classStruct & Interface根本特性虚函数纯虚函数笼统类接口虚函数语法特性虚析构函数语法在普通成员函数前面加 virtual 关键字一个函数在基类声明一个virtual,那么在一切的派生类都是是virtual的一个函数在基类为普通函数,在派生类定义为virtual的函数称为越位特性实施晚期绑定即运转时辰绑定,实施多态的一种方法具有虚函数类的虚函数表的规划如下:classvtprclass:m1class:m2纯虚函数语法:成员函数前面加 virtual 关键在,在函数声明的)后标注 “ = 0 关键字在声明纯虚函数

7、类中不能实现该函数笼统类具有纯虚函数的类就是笼统类笼统类不能被实例化,所以笼统类只能以指针方式被运用笼统类可以防止切片的发生笼统类不产生虚表。用户接口接口的演化与接口的必要性接口运用特例接口运用例如接口的演化与接口的必要性Handle-Body 方式笼统接口classHandlem_pThisclassclassvtprclass:m1class:m2接口运用特例多重接口与方法名冲突问题Siamese twins提出问题:假设汽车最大速度的接口为ICar,潜艇最大速度的接口为 IBoat,有一个两栖类的交通工具它可以奔跑在马路上,也可以航行在大海中,那么它就同时拥有ICar、IBoat两种交通

8、工具的最大速度特性,我们定义它的接口为ICarBoat;处理问题采用中间类的处理方法内嵌内的处理方法留给大家思索采用中间类的处理方法接口运用例如笼统工厂第二章:运算符重载根本概念可重载和不可重载几类特殊的运算符重载运算符重载的运用根本概念Overloaded FunctionsOverloaded OperatorsDeclaration MatchingArgument MatchingArgument Types MatchingArgument Counts MatchingC+ Unary OperatorsBinary OperatorsSmart Pointer Function

9、Objects可重载和不可重载可重载运算符+ */ % &| ! = +=*= /= %= = &= |= = = = != = & | + *, () new new delete delete不可重载运算符. .* : ? : # # / /* */特殊的运算符重载一运算符 下标运算符 必需是成员函数并且它需求单个参数。由于它暗示对象像数组一样动作,可以经常从这个运算符前往一个援用,所以它可以被很方便地用于等号左侧。这个运算符经常被重载运算符n e w和d e l e t e控制动态内存分配,当创建一个n e w表达式时有两件事发生。首先,运用运算符n e w分配内存,然后调用构造函数。在

10、d e l e t e表达式里,调用析构函数,然后运用运算符d e l e t e释放内存。我们永远无法控制构造函数和析构函数的调用否那么我们能够不测地搅乱它们,但可以改动内存分配算法n e w和d e l e t e特殊的运算符重载二逗号运算符当逗号出如今逗号运算对象左右时,逗号运算符被调用。然而,逗号运算符在函数参数表中出现时不被调用重点引见的运算符转换运算符运算符&地址运算符-运算符( )转换运算符转换函数称号operator 转换数据类型名,如 MFC 中的operator LPCSTR作用经过在关键字operator后跟随想要转换到的类型的方法,将当前类型转换为希望的类型构造转换&运

11、算符转换用构造函数技术,目的类执行转换。然而运用运算符技术,是源类执行转换构造函数技术的价值是在创建一个新类时为现有系统添加了新的转换途径。然而,创建一个单一参数的构造函数总是定义一个自动类型转换即使它有不止一个参数也是一样,由于其他的参数将被缺省处置,这能够并不是我们所想要的。另外,运用构造函数技术没有方法实现从用户定义类型向内置类型转换,这只需运算符重载能够做到。运算符&运用:规范模板库中的std:auto_ptrCOM中的CComPtr重载缺陷:地址是一个对象的及其根本的特性,假设某类型重载 & 运算符,该类型将无法参与泛型编程对于smart ptr 实施的&运算,意味着完全放弃了对拥有

12、权的自动管理。当客户直接访问原生对象的时候,smart ptr 将失去它的辅助作用效应运算符-Operator- 机制当他对某一型别实施operator-,而该型别并非原生指针时,编译器会继续对执行的结果实施operator-,直到得到一个原生指针作用Smart Pointer的运用可以对对象的成员函数实施“前调用及“后调用 (pre- and post- function calls)运算符( )functors or function objects特点声明象对象实践上也是对象,调用象函数运用广泛运用于STL的各种算法,实施函数配接运算符重载的运用智能指针仿函数智能指针关键点重载“-运算符

13、的对象作用在多线程编程中自动进展加解锁操作自动实施对象援用衔接计数,进展对象的生命周期管理仿函数关键点重载“()运算符作用主要用于函数配接,参数配接,广泛运用于STL第三章:模 板根本概念根本语法模板设计中的非习惯性思想模板设计的根本方法方法设计例如-STL规范模板库模板的佳作根本概念typenameFunction Templates Class Templates STL(Standard Template Library)functors、function adpterscontainers、iterator、traits、vector、list、deque、stack、queue、he

14、ap、set、map、hashtable、RB-treestlport、boost、loki根本语法template declaration这个template描画了一个参数化的类模板类或者是一个参数化的函数模板函数,这个模板参数列表是用逗号分隔的类型列表在这个表单忠运用 class 或者是 typename 来标识这个数据类型。在某些情况下这个模板体内能够不存在任何的数据类型。declaration 域必需是一个函数或者类的声明 模板设计中的非习惯性思想声明并不一定要定义定义类不一定要有成员、成员不仅仅是方法和成员变量定义类不一定要有成员成员不仅是方法和成员变量class EmptyType

15、;templatestruct iterator_traitstypedef typename I:iterator_category iterator_categorytypedef typename I:value_type value_type;typedef typename I:difference_type differnce_type;typedef typename I:pointer pointer;typedef typename I:refrence refrence;Template struct int2type enum value = v ;声明并不一定要定义声明

16、一个函数,并不定义制止某种缺省函数的调用声明一个函数而不实现能够是为了模板函数的泛化声明一个函数能够仅仅为了获得特殊某一项功能声明一个类而不实现制止模板类的泛化,只允许特化实施编译某项功能的检测如:编译时辰断言模板设计的根本方法编译器断言模板特化部分类常数映射型别型别映射型别型别选择Null class or null function 和 Empty classType Traits模板嵌套Policy class利用模板设计的方法解题编译时辰测试类型的可转换性用到的技术:只定义不实现函数多态性可变参函数sizeoftemplatetypedef char small; class big

17、char dummy2;static small test(U);只定义不实现static big test();static T markT();/函数定义只是为了得到一个前往类型public;enum value = sizeof(test(makT()= sizeof(Small) ;STL规范模板库容器迭代器算法仿函数配接器容器序列容器vector,list、deque、stack(没有迭代器)、queue(没有迭代器)、即stack、queue不允许遍历行为关联容器set(规范)、map(规范)、hash_table、 RB-tree通用算法begin()、end()、size()、

18、empty()、erase(iterator _position)、clear()迭代器迭代器的根本算法迭代器型别型别萃取迭代器的根本算法可以进展+、+、-、+=、=、= = 、!=等运算是一种智能性指针,实现operator * operator -的重载根据迭代器的特点,迭代器又称循环子迭代器前闭后开区间 first, last)型别 单向迭代器可逆迭代器随机迭代器 迭代器的承继关系:型别萃取型别value_typedifference_typerefrence_typepointer_typeiterator_category型别萃取机iterator_traits算法数值运算power

19、、itoa、accumulate根本运算fill、fill_n、swap、max、min、iter_swap、copy集合运算set_union、set_interseion、set_diffrence数据整理(以循环子为参数)count、count_if、find、find_if、for_each、merge、sort、upper、search、search_n仿函数一元仿函数二元仿函数二元化一元仿函数仿函数运用一元仿函数template struct unary_function typedef _Arg argument_type; typedef _Result result_type

20、;templatestruct negate:public unary_function_Tp operator()(const T&x) const return x;:二元仿函数template struct less : public binary_function bool operator()(const _Tp& _x, const _Tp& _y) const return _x _y; ;二元化一元仿函数Class binder1st binder1st(const Operation &op, const T1 &y); operator()(const T2 &x);仿函数运用template inline _InputIter _find_if(_InputIter _first, _InputIter _last, Operation _op, const input_iterator_tag &) while (_first != _last & !_op(*_first) +_first; return _first;配接器容器配接器stackQueue迭代配接器Reverse IteratorsIOStream IteratorsInert_Iterator仿函数配接器容器配接器容器配接器Stacktemplate class _Tp, clas

温馨提示

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

评论

0/150

提交评论