收藏 分享(赏)

化为C++中级培训胶片.ppt

上传人:gnk289057 文档编号:8292056 上传时间:2019-06-18 格式:PPT 页数:66 大小:1,004.50KB
下载 相关 举报
化为C++中级培训胶片.ppt_第1页
第1页 / 共66页
化为C++中级培训胶片.ppt_第2页
第2页 / 共66页
化为C++中级培训胶片.ppt_第3页
第3页 / 共66页
化为C++中级培训胶片.ppt_第4页
第4页 / 共66页
化为C++中级培训胶片.ppt_第5页
第5页 / 共66页
点击查看更多>>
资源描述

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

2、olling Access to Class Membersprivate Membersprotected Memberspublic MembersAccess Specifiers for Base Classes,priavte,public、protectedFriendsConstructorsDestructorsConversion Functionsthe new operator and the delete operatorCopying Constructor FunctionsInterface,类的基本特性,构造函数与拷贝构造函数 静态成员与友元 组合与继承,构造函

3、数与拷贝构造函数,C+规定与类同名的函数就是拷贝构造函数 默认拷贝构造函数 在类定义中如果没有提供自己的拷贝构造函数,则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*) (Base*)(A1*)&bObject != (Base*)(A2*)&bObject 成立,当这种事情发生的时候我们就只能特殊处理了。这种情况在COM应用中处处都会发生 。,第二章:接 口,基本知识 基本特性 接口应用的特例 应用举例,基本概念,Class Virtual functions Pure virtual functions Abstract class Struct

6、& Interface,基本特性,虚函数 纯虚函数 抽象类 接口,虚函数,语法 特性 虚析构函数,语法,在普通成员函数前面加 virtual 关键字 一个函数在基类申明一个virtual,那么在所有的派生类都是是virtual的 一个函数在基类为普通函数,在派生类定义为virtual的函数称为越位,特性,实施晚期绑定(即运行时刻绑定),实施多态的一种方法 具有虚函数类的虚函数表的布局如下:,纯虚函数,语法: 成员函数前面加 virtual 关键在,在函数申明的”)”后标注 “ = 0” 关键字 在申明纯虚函数类中不能实现该函数,抽象类,具有纯虚函数的类就是抽象类 抽象类不能被实例化,所以抽象类

7、只能以指针方式被应用 抽象类可以防止切片的发生 抽象类不产生虚表。,用户接口,接口的演化与接口的必要性 接口应用特例 接口应用示例,接口的演化与接口的必要性,Handle-Body 模式抽象接口,接口应用特例,多重接口与方法名冲突问题(Siamese twins) 提出问题: 假设汽车最大速度的接口为ICar,潜艇最大速度的接口为 IBoat,有一个两栖类的交通工具它可以奔跑在马路上,也可以航行在大海中,那么它就同时拥有ICar、IBoat两种交通工具的最大速度特性,我们定义它的接口为ICarBoat; 解决问题 采用中间类的解决办法 内嵌内的解决办法(留给大家思考),采用中间类的解决办法,接

8、口应用示例,抽象工厂,第二章:运算符重载,基本概念 可重载和不可重载 几类特殊的运算符重载 运算符重载的运用,基本概念,Overloaded Functions Overloaded Operators Declaration Matching Argument Matching Argument Types Matching Argument Counts Matching C+ Unary Operators Binary Operators Smart Pointer Function Objects,可重载和不可重载,可重载运算符 + * / % & | ! = += = *= /=

9、%= = &= |= = = & | + * , () new new delete delete 不可重载运算符 . .* : ? : # # / /* */,特殊的运算符重载(一),运算符 下标运算符 必须是成员函数并且它需要单个参数。因为它暗示对象像数组一样动作,可以经常从这个运算符返回一个引用,所以它可以被很方便地用于等号左侧。这个运算符经常被重载 运算符n e w和d e l e t e 控制动态内存分配,当创建一个n e w表达式时有两件事发生。首先,使用运算符n e w分配内存,然后调用构造函数。在d e l e t e表达式里,调用析构函数,然后使用运算符d e l e t e释放内存。我们永远无法控制构造函数和析构函数的调用(否则我们可能意外地搅乱它们),但可以改变内存分配算法n e w和d e l e t e,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报