2022年《C++Primer》4第四部分学习笔记汇总_面向对象编程与泛型编程

上传人:高**** 文档编号:233980056 上传时间:2022-01-03 格式:DOCX 页数:6 大小:21.95KB
返回 下载 相关 举报
2022年《C++Primer》4第四部分学习笔记汇总_面向对象编程与泛型编程_第1页
第1页 / 共6页
2022年《C++Primer》4第四部分学习笔记汇总_面向对象编程与泛型编程_第2页
第2页 / 共6页
2022年《C++Primer》4第四部分学习笔记汇总_面向对象编程与泛型编程_第3页
第3页 / 共6页
2022年《C++Primer》4第四部分学习笔记汇总_面向对象编程与泛型编程_第4页
第4页 / 共6页
2022年《C++Primer》4第四部分学习笔记汇总_面向对象编程与泛型编程_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《2022年《C++Primer》4第四部分学习笔记汇总_面向对象编程与泛型编程》由会员分享,可在线阅读,更多相关《2022年《C++Primer》4第四部分学习笔记汇总_面向对象编程与泛型编程(6页珍藏版)》请在金锄头文库上搜索。

1、C+ Primer第四部分学习笔记汇总面对对象编程与泛型编程继承,动态绑定,数据抽象,函数模板C+ Primer 第 15 章学习笔记第 15 章:面对对象编程面对对象编程基于三个基本概念:数据抽象,继承,动态绑定.用类进行数据抽象用类派生从一个类继承另一个类:派生类继承基类成员.动态绑定使编译器能够在运行时预备是使用基类中定义的函数仍是派生类中定义的函数.学习摘录 162:继承与动态绑定的作用:能够简洁地定义与其他类相像但又不相同的新类,能够更简洁地编写忽视这些相像类型之间区分的程序.学习摘录 163:多态性面对对象编程的关键思想是多态性(polymorphism )继承而相关联的类型为多态

2、类型.学习摘录 164:继承派生类( derived class)能够继承基类(base class)定义的成员派生类可以无须转变而使用那些与派生类型详细特性不相关的操作派生类可以重定义那些与派生类型相关的成员函数,将函数特化,考虑派生类型的特性.在 C+中,基类必需指出期望派生类重定义哪些函数,定义为 virtual 的函数是基类期望派生类重新定义的,基类期望派生类继承的函数不能定义为虚函数.学习摘录 165:动态绑定( dynamic binding )我们能够编写程序使用继承层次中任意类型的对象,无须关怀对象的详细类型.学习摘录 166:protected 成员可以认为 protecte

3、d 拜望标号是 private 和 public 的混合: 1. 像 private 成员一样, protected 成员不能被类的用户拜望. 2. 像 public 成员一样, protected 成员可被该类的派生类拜望.派生类只能通过派生类对象拜望其基类的protected成员,派生类对其基类类型对象的protected成员没有特别拜望权限.学习摘录 167:派生类类型接口简洁地说:供应应派生类型接口是protected成员和 public 成员的集合.学习摘录 168:派生类为了定义派生类,使用类派生列表(class derivation list )指定基类. class class

4、name: access-label base-class这里的 access-label 是 public ,protected 或 private, base -class 是已定义的类的名字.学习摘录 169:派生类和虚函数可编辑资料 - - - 欢迎下载一旦函数在基类中声明为虚函数,它就始终为虚函数,派生类无法转变该函数为虚函数这一事实.派生类重定义虚函数时,可以使用virtual 保留字,但不是必需这样做.学习摘录 170:virtual 与其他成员函数 C+函数默认不使用动态绑定.要触发动态绑定,必需中意两个条件:第一,要将成员函数指定为虚函数.(默认的成员函数都是非虚函数)其次,

5、要通过基类类型的引用或指针进行函数调用.学习摘录 171:静态类型与动态类型的概念静态类型( static type )在编译时可知的引用类型或指针类型.动态类型( dynamic type )指针或引用所绑定的对象的类型,这是仅在运行时可知的.学习摘录 172:C+中的多态性引用和指针的静态类型与动态类型可以不同,这是C+用以支持多态性的基石.学习摘录 173:派生类函数调用基类版本只有成员函数中的代码才应当使用作用域操作符掩盖虚函数机制.掩盖虚函数机制,最常见的理由是为了派生类虚函数调用基类中的版本.派生类虚函数调用基类版本时,必需显式使用作用域操作符.假如派生类函数忽视了这样做,就函数调

6、用会在运行时确定并且将是一个自身调用,从而导致无穷递归.学习摘录 174:继承与组合定义一作为另一个类的公用派生类时,派生类应反映与基类的“是一种(Is A)”关系.在书店的例子中, 基类表示按规定价格销售的书的概念,Bulk_item 是一种书, 但具有不同的定价策略.类型之间另一种常见的关系是称为“有一个Has A”的关系.书店的例子的类具有价格和ISBN.学习摘录 175:友元关系与继承基类或派生类可以使其他类或函数成为友元.友元可以拜望类的private 和 protected 数据.友元关系不能继承.学习摘录 176:转换与继承每个派生类对象包含一个基类部分.可以将派生类对象的引用转

7、换为基类子对象的引用,对指针也类似.没有从基类引用(或基类指针)到派生类引用(或派生类指针)的(自动)转换.没有从派生类型对象到基类类型对象的直接转换.第四节:构造函数和复制把握构造函数和复制把握成员不能继承,每个类定义自己的构造函数和复制把握成员.学习摘录 177:合成的派生类默认构造函数派生类的合成默认构造函数与非派生的构造函数只有一点不同:可编辑资料 - - - 欢迎下载除了初始化派生类的数据成员外,仍要初始化派生类对象的基类部分.基类部分由基类的默认构函数初始化.学习摘录 178:派生类的构造次序构造函数初始化列表为类的基类和成员供应初始值,它并不指定初始化的执行次序.第一初始化基类,

8、然后依据声明次序初始化派生类的成员.学习摘录 179:只能初始化直接基类一个类只能初始化自己的直接基类.(直接基类就是在派生列表中指定的类.)假如类从类派生,类从类派生,那是的直接基类.学习摘录 180:重构( refactioring )重构包括重新定义类层次,将操作和/ 或数据从一个类移到另一个类.为了适应应用程序的需要而重新设计类以便增加新函数或处理其他转变时,最有可能需要进行重构.然而,对类进行重构,或以任意其他方式转变类,使用这些类的任意代码都必需重新编译.学习摘录 181:敬重基类接口构造函数只能初始化其直接基类的缘由是每个类都定义了自己的接口.一旦定义了自己的接口,与该类对象的全

9、部交互都应当通过接口.学习摘录 182:定义派生类复制构造函数假如派生类显式定义自己的复制构造函数或赋值操作符,就该定义将完全掩盖默认定义.被继承类的复制构造函数和赋值操作符负责对基类成分以及类自己的成员进行复制或赋值.学习摘录 183:派生类析构函数析构函数的工作与复制构函数和赋值操作符不同:派生类析构函数不负责撤销基类对象的成员.每个析构函数只负责清除自已的成员,对象的撤销次序与构造次序相反:第一运行派生类析构函数, 然后按继承层次依次向上调用各基类析造函数.假如析构函数为虚函, 那么通过指针调用时, 运行哪个析构函数将因指针所指对象类型的不同而不同.即使析构函数没有工作要做,继承层次的根

10、类也应当定义一个虚件构函数.学习摘录 184:构造函数和赋值操作符不是虚函数在复制把握成员中,只有析构函数应定义为虚函数,构造函数不能定义为虚函数.将类的赋值操作符设为虚函数很有可能会令人混淆,而且不会有什么好处.第五节:继承情形下的类作用域在继承情形下,派生类的作用域嵌套在基类作用域中.假如不能在派生类作用域中确定名字,就在外围基类作用域查找该名字的定义.学习摘录 185:名字冲突与继承与基类成员同名的派生类成员将屏蔽对基类成员的直接拜望.可以使用作用域操作符拜望被屏蔽的基类成员.学习摘录 186:纯虚函数可编辑资料 - - - 欢迎下载含有(或继承)一个或多个纯虚函数的类是抽象基类(abs

11、tract base class).除了作为抽象基类的派生类的对象的组成部分,不能创建抽象类型的对象.学习摘录 187:容器与继承由于派生类对象在赋值给基类对象时会被“切掉”,所以容器与通过继承相关的类型不能很好地融合.第八节:句柄类与继承 C+中面对对象编程中一个颇具讽刺意味的地方是,不能使用对象支持面对对象编程,相反,必需使用指针或引用.学习摘录 188:定义包装类和句柄类 C+中一个通用的技术是定义包装(cover)类或句柄( handle)类.句柄类,储备和治理基类指针.指针所指对象的类型可以变化,它既可以指向基类类型对象又可以指向派生类型对象.学习摘录 189:包装了继承层次的句柄有

12、两个重要的设计考虑因素: 1. 像对任何储存指针的类一样,必需确定对复制把握做些什么. 2. 句柄类预备句柄接口屏蔽仍是不屏蔽层次,假如不屏蔽层次,用户必需明白和使用基本层次中的对象.C+ Primer 第 16 章学习笔记第 16 章:模板与泛型编程泛型编程,就是以独立于任何特定类型的方式编写代码.使用泛型程序时,我们需要供应详细程序实例所操作的类型或值.学习摘录 190:补充概念:多态性面对对象编程所依靠的多态性称为运行时多态性.泛型编程所依靠的多态称为编译时多态性或参数式多态性.学习摘录 191:定义函数模板函数模板( functiontemplate )是一个独立于类型的函数,可作为一

13、种方式,产生函数的特定类型的版本.模板定义以关键字template 开头,后接模板形参表(template parameter list ).模板形参表是用尖括号括住的一个或多个模板形参(template parameter )的列表.模板形参表不能为空.学习摘录 192:使用函数模板实例化产生模板的特定类型的过程称为实例化.要进行实例化,编译器必需能够拜望定义模板的源代码.使用函数模板时,编译器会推断哪个模板实参绑定到模板形参.一旦编译器确定了实际的模板实参,就称它为实例化(instantiate )了函数模板的一个实例.可编辑资料 - - - 欢迎下载学习摘录 193:typename 与

14、 class的区分在函数模板形参中,关键字typename 和 class 相同含义,可互用,只有有时候typename 比 class要直观.学习摘录 194:链接时的编译时错误编译模板时,编译器可能会在三个阶段中标识错误: 1. 第一阶段是编译模板定义本身时.一般的语法错误类的. 2. 其次阶段时在编译器见到模板的使用时,检查实参加形参是否相对映. 3. 第三阶段是在实例化时,只有在这个时候可以发觉类型相关的错误.学习摘录 195:类模板中的友元声明 1. 一般非模板类或函数的友元声明,将友元关系授予明确指定的类或函数. 2. 类模板或函数模板的友元声明,授予对友元全部实例的拜望权. 3. 只授予对类模板或函数模板的特定实例的拜望权的友元声明.如:template class Bar/ grants access to ordina

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 高中教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号