欢迎来到天天文库
浏览记录
ID:51256578
大小:503.50 KB
页数:66页
时间:2020-03-20
《华为-C中级培训讲义.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、C++中级培训员工培训中心2005年7月1日蔡利元课程内容第一章:类第二章:接口第三章:运算符重载第四章:模板第一章:类基本概念类的基本特性类的应用的特例基本概念namespaceClassnamesClassmembersMemberFunctionsStaticMemberFunctionsUnionsC++BitFieldsNestedClassDeclarationsTypeNamesinClassScopeMultipleBaseClassesVirtualFunctionsAbstractClassesControllingAccesstoClassMembers
2、privateMembersprotectedMemberspublicMembersAccessSpecifiersforBaseClasses,priavte,public、protectedFriendsConstructorsDestructorsConversionFunctionsthenewoperatorandthedeleteoperatorCopyingConstructorFunctionsInterface类的基本特性构造函数与拷贝构造函数静态成员与友元组合与继承构造函数与拷贝构造函数C++规定与类同名的函数就是拷贝构造函数默认拷贝构造函数在类定义中如
3、果没有提供自己的拷贝构造函数,则C++提供一个默认的构造函数,其拷贝策略是逐个成员依次拷贝。深拷贝和浅拷贝默认拷贝构造函数均是浅拷贝但是一个类可能拥有其它资源,如其构造函数分配了一个堆内存,析构函数释放了这个内存,则此时就需要进行深拷贝了深拷贝不能依赖编译器实现静态成员与友元静态成员使用static申明,在内存中永远只有一份实例是类的对象所共有的静态成员变量可以被成员函数访问,但静态成员函数只能访问静态成员变量友元是为了一个普通函数直接访问一个类的保护甚至是私有成员的机制组合与继承C++最重要的性能之一是代码重用简单地创建一个包含已存在的类对象的新类,这称为组合,has-a关
4、系创建一个新类作为一个已存在类的类型,采取这个已存在类的形式,对它增加代码,但不修改它。称为继承,具有is-a关系,继承具有单一继承和多继承类的应用的特例继承中的向上映射与切片问题多继承中发生的菱形缺陷this跳转继承中的向上映射与切片问题如果有classB:publicA;Bb;Aa=b;这就是切片现象而B*pb=newB;A*pa=pb;则不会发生切片,因为这只是指针的赋值而不涉及到切片现象多继承中发生的菱形缺陷菱形缺陷导致的原因:发生了菱形继承,如右图两个缺陷:子对象重叠向上映射的二义性解决办法:修改多继承关系为单一继承关系或者是组合关系进行虚继承this跳转如右图继承
5、关系对于一个已经实例化B类的对象bObject,永远有(B*)&bObject==(A*)&bObject成立但是在多继承的世界内,上面的等式就不能恒成立,对象的同一性受到了挑战。特别的是,在多继承世界内如果左下的菱形关系存在情况下,如果对于已经实例化B类的对象bObject;(Base*)(A1*)&bObject!=(Base*)(A2*)&bObject成立,当这种事情发生的时候我们就只能特殊处理了。这种情况在COM应用中处处都会发生。第二章:接口基本知识基本特性接口应用的特例应用举例基本概念ClassVirtualfunctionsPurevirtualfunctio
6、nsAbstractclassStruct&Interface基本特性虚函数纯虚函数抽象类接口虚函数语法特性虚析构函数语法在普通成员函数前面加virtual关键字一个函数在基类申明一个virtual,那么在所有的派生类都是是virtual的一个函数在基类为普通函数,在派生类定义为virtual的函数称为越位特性实施晚期绑定(即运行时刻绑定),实施多态的一种方法具有虚函数类的虚函数表的布局如下:classvtprclass::m1class::m2纯虚函数语法:成员函数前面加virtual关键在,在函数申明的”)”后标注“=0”关键字在申明纯虚函数类中不能实现该函数抽象类具有纯
7、虚函数的类就是抽象类抽象类不能被实例化,所以抽象类只能以指针方式被应用抽象类可以防止切片的发生抽象类不产生虚表。用户接口接口的演化与接口的必要性接口应用特例接口应用示例接口的演化与接口的必要性Handle-Body模式抽象接口classHandlem_pThisclassclassvtprclass::m1class::m2接口应用特例多重接口与方法名冲突问题(Siamesetwins)提出问题:假设汽车最大速度的接口为ICar,潜艇最大速度的接口为IBoat,有一个两栖类的交通工具它可以奔跑在马路上,
此文档下载收益归作者所有