下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1. 之所以成通过继承而相关联的类型为多态类型,是因为许多情 况下可以互换地使用派生类型或基类型的许多形态。 在 c+ 中, 多态性仅应用于通过继承而相关联的 类型的引用或指针。 2. 在 C+ 中,通过基类的引用(或指针)调用虚函数时,发 生动态绑定 。引用(或指针)既可以指向基类对象也可以指 向派生类对象 ,这一事实是动态绑定的关键。用引用(或指 针)调用的虚函数在运行时确定,被调用的函数是引用(或 指针)所指对象的实际类型所定义的。 3. 基类要定义虚析构函数 4. 除了构造函数以外任意非 static 函数都可以是虚函数。派生 类不能访问基类的 private 成员。 Protecte
2、d 成员能被派生 类的成员函数访问不能被友元访问 。 5. 派生类中虚函数的声明必须与基类中的定义方式完全匹配,但 有一个例外:返回对基类型的引用(指针)的虚函数, 派生类 中的虚函数可以返回基类函数所返回类型的派生类的引用(指 针)。 6. 动态绑定的两个条件: 1 虚函数 2 用基类的引用或者指针进 行调用。 只有成员函数 中的代码才能通过作用域操作符覆盖 虚函数机制。 覆盖很多时候因为很多派生类要先完成基类版 本中的工作再额外完成其他工作。 派生类版本的虚函数调用 基类版本时必须指定作用域, 不然会递归! 7. 在同一虚函数的基类版本和派生版本中使用不同的默认实参几 乎一定会引起麻烦。如
3、果通过引用或者指针调用虚函数,但在 实际执行的是派生类中定义的版本,这时就肯能会出现问题。 此时,为虚函数的基类版本定义的默认实参将传给派生类定义 的版本,而派生类版本是用不同的默认实参定义的。 8. 每个类控制它所定义的成员的访问。派生类可以进一步限制 但不能放松对继承的成员的访问。访问列表中的访问标号决 定。 公有继承:基类的成员保持原有的属性。 保护继承: 基类的非私有成员均为保护成员。私有继承:基类的非私有 成员均为私有。可以在派生类中使用 using 命令(在 public 里声明 using abc:size 可以把 size 恢复成 public )使得它 重新变为公有 / 保护
4、,关键在于访问级别。 Class 默认私有继 承, struct 默认公有继承 9. 友元不会被继承。不管怎么继承 static 成员只有一个实例,如 果在基类里面是 private 则不会被访问。 10. 访问方式: 1 基类:成员名。 2 派生类:成员名 3 对象 引用指针 4 直接用成员名 11. 派生类的引用和指针到基类可以自动转换;反过来没有自动转 换。严格来说对象没有转换,但是可以用派生类的对象来初始 化和赋值基类对象。将派生类的对象传递给希望接受基类引用 的函数,实际上式传递引用,对象没有变。如果将它传递给接 受对象的函数,则复制基类部分。对派生类对基类对象进行初 始化复制:1
5、显示定义复制构造函数 2 定义构造函数 / 复制操作 符 ;以上方法并不常见, 基类一般确定自己的赋值操作符和构造 函数(传递 const 引用,大家都可以用)注意:访问标号。 用 base 指针指向 derived 对象,再用此指针给另外 derived 指 针赋值需要显示强制类型转换。 12. 派生类的默认构造函数将调用基类的构造函数 。如果派生类 显示定义自己的复制构造函数或复制操作符, 则该定义将完 全覆盖默认定义 。被继承类的复制构造函数和赋值操作符负 责对基类成分及类自己的成员进行复制或复制。 如果派生类 定义了自己的复制构造函数,该函数一般 显示使用基类复制 构造函数初始化基类部
6、分 ,如果不这样做很可能用默认构造 函数初始化基类部分。 赋值操作符首先确保避免自身赋值, 然后调用基类的赋值操作符。 13. class Bulk_item : public Item_base public: Bulk_item( const std:string& book, double sales_price , 在派生类构造函数参数列表中不能直接初始化基 类(设置默认参数 ) std:size_t qty = 0, double disc_rate = 0.0): Item_base(book, sales_price), 可以把基类 包含在初始化列表中,将参数传递给基类构
7、造函数 min _qty(qty), disco un t(disc_rate) ; 14. 尊重基类接口,在派生类中使用接口,不要直接在构造函数 中对基类成员赋值 15. 每个析构函数负责删除自己的成员。如果在构造函数或析构函 数中调用虚函数,则运行的是为构造函数或析构函数自身类型 定义的版本。(在基类的构造函数或析构函数中调用的虚函数 是该函数的基类版本) 16. 基类一定要有虚的析构函数,因为可能会删除指向派生类的 基类指针。 17与基类同名的派生类成员将屏蔽对基类成员的直接访问,如果 需要访问基类成员需要用作用域标示符。尽量避免使用同名的 成员。函数也会屏蔽即使原型不同。 想要在派生类
8、中重新定义 在基类中重载过的函数的一个特殊版本,用 using 把函数名复 制过来,再重载特殊版本。 18.函数调用过程: .首先确定进行函数调用的对象、引用或指针的静态类型。 *再该类型中查找函数,如果找不到,就在直接基类中查找, 如此遵循着类的继承往上找,知道找到该函数或者查找完最 后一个类。如果不能在类或其相关基类中找到该类的名字, 则调用错误的。 一旦找到了该名字,就进行常规的类型检查,查看如果给定找 到的定义,该函数调用是否合法。 .假定函数调用合法,编译器就生成代码。如果函数是虚函数 且通过引用或指针调用,则编译器生成代码以确定根据对象 的动态类型运行哪个函数版本,否则,直接生成代
9、码调用函 数。 1. 虚函数的重定义要求参数列表一致(可以默认形参不同,对对 象的 con st 不同(后面),返回值相同(例外是基类返回基类 的指针或引用,派生类返回派生类的指针或引用)。 含有一 个或多个纯虚函数的类是抽象基类,不能创建对象。 2. 句柄:是封装了指向对象和指向计数器指针的类,它绑定对 象以后可以帮助对象完成后台的操作。代码使用句柄将不用 管理对象的指针,但是仍然可以获得通过 Sales_item 对象 进行的调用的虚行为。在一个类中封装了其他类需要 tyepdef 其类成员比便用户使用。 3. class Sales_item public: / default con
10、structor: unbound han dle Sales_item(): p(0), use (new std:size_t(1) / attaches a han dle to a copy of the Item_base object Sales_item(c onst Item_base&); / copy control members to manage the use count and pointers Sales_item(const Sales_item &i): p(i.p), use(i.use) +*use; Sales_item() decr_
11、use(); Sales_item& operator=(const Sales_item&); / member access operators const Item_base *operator-() const if (p) return p; else throw std:logic_error(unbound Sales_item); 重截 - 可以让智能指针直接访问对象成员 const Item_base &operator*() const if (p) return *p; else throw std:logic_error(unbound Sales_item); private: Item_base *p; / pointer to shared item std:size_t *use; / pointer to shared use count / called by both destructor and assignment operator to free pointers v
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 临时保姆应急合同模板
- 2025年度大型活动临时舞台搭建合同书3篇
- 田园风格二手房买卖合同模板
- 舞蹈教练经纪人聘用协议
- 公共工程项目施工合同违约协议书
- 旅游咨询市场管理办法
- 证券公司固定资产管理方案
- 地质设备维护劳务分包协议
- 航空航天产业房产转让范本
- 农村道路安全使用与规划指南
- GB/T 5343.2-2007可转位车刀及刀夹第2部分:可转位车刀型式尺寸和技术条件
- GB/T 32285-2015热轧H型钢桩
- 中考数学真题变式题库
- FZ/T 91019-1998染整机械导布辊制造工艺规范
- 主持人培训 课件
- SHSG0522003 石油化工装置工艺设计包(成套技术)内容规定
- 制造部年终总结报告课件
- 企业大学商学院建设方案
- 粤科版高中通用技术选修1:电子控制技术全套课件
- 幼儿园大班数学:《长颈鹿的水果店》 课件
- 检验批现场验收检查原始记录
评论
0/150
提交评论