- 1、本文档共135页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C++语言基础 C++语言的特点 C++中的函数 函数重载 函数重载的实现 VC中的处理 extern “C”的使用 匹配重载函数的顺序 默认参数 内联函数 内联函数的局限性 引用的概念 引用的操作 什么可以被引用? 引用与指针 使用引用传递函数参数 用引用返回值 函数调用作为左值 再谈“const”用于值替代 返回const值 C++中的其它改变 一个小型的C语言库 其中存在的问题 迈向C++的第一步 对Stash的一些改进 几个概念 再谈“成员函数” 隐藏实现 C++的存取控制 再谈“封装” 初始化与清除 构造函数 析构函数 拷贝构造函数 (Copy Constructor) 深拷贝与浅拷贝 代码重用之组合 初始化表达式(冒号语法) 代码重用之组合 类中的const 编译期间的常量 const对象 const成员函数 静态数据成员 静态成员函数 名空间 using namespace std printf 和scanf的缺陷 I/O标准流 文件流 串流类 Manipulators 继承 继承的工作方式 派生类的构造与析构 对初始化列表的总结 继承的访问控制 私有继承 保护 成员函数的隐藏 组合和继承 练习 — 从薪水谈起 对薪水的进一步要求 类型适应 向上映射 两个结论 late binding 关键字“virtual”与多态 成员函数的覆盖(override) 晚绑定的内部实现 虚函数的限制 抽象类 抽象类派生具体类 纯虚函数的需要性 C语言程序员如何学习C++ 多重继承(MI) 问题 继承的模糊性 “菱形”结构 虚拟继承 虚拟继承的其它问题 关于多继承的思考 多继承的构造顺序 运算符重载 值返回和引用返回 重载增量运算符 转换函数 转换运算符 赋值运算符 面向对象部分的默认 重载插入运算符 插入运算符与虚函数 模板的概念 重载函数模板 函数模板 vs 模板函数 像sam31中这种将派生类中的对象、引用、指针变成基类中的对象、引用、指针的活动称为“向上映射”。 我再将介绍“组合和继承时”说的一句话重复一下:继承的最重要的方面不是它为派生类提供了成员函数,而在于基类与派生类之间的关系:“新类是已存在的类的一个类型”。 从sam31中,我们可以看出无论我们传的参数是什么,函数的结果总是固定的,它总是调用基类的ComputePay()函数。 截至到目前,我们可以得到两个结论: 如果我们使用一个“基类的指针或引用”来指向“派生类的对象”,那么经由该指针或引用只能调用基类的成员函数。 如果基类和派生类都定义了同名的成员函数,那么通过对象指针(引用)调用成员函数时,到底调用哪一个函数,必须视该指针的原始类型而定,而不是视指针实际指向的对象的类型(其实这两点是相通的)。 那么我们怎么解决像sam31中出现的这类问题呢? 在基类的前面加上关键字virtual试试! 实际上在C++中,使用一种被称为“late binding”的技术来解决这类问题。 把函数和函数体调用相联系称为“bingding”(绑定),在编译时就能确定哪个函数被调用,称为“early binding”(绑定发生在运行之前)。在C语言(面向过程的语言)中,只有一种函数调用方式,那就是“early bingding”。 这种在运行期间能够根据对象的实际类型决定调用那个函数的能力,称为“多态性”。 在C++中使用virtual来实现晚绑定。即在C++中晚绑定只对virtual起作用。 需要动态联编的函数如果声明为virtual,那么虚函数的性质会自动向下带给其子类,所以派生类中virtual可以省略。 virtual只能加在成员函数的声明前面,注意:不能在成员函数的定义前面virtual。 重载(overload)、覆盖(override)是不是很容易让你混淆。重载就不多说了,覆盖只发生在成员函数的继承时,它是指派生类重新实现了基类的成员函数。它的特征是: 不同的作用域(分别位于基类和派生类中)。 函数名相同,参数类表完全相同。 基类函数中必须有virtual关键字。 那么C++在内部是如何实现晚绑定的呢?记不记得我们前面讲过,如果一个类中的某个函数加了virtual关键字,那么它的大小就会增加4个字节。 晚绑定的奥妙就在于此,C++为每一个内含虚函数的类都要建一个“虚函数表”(vtable),通过该表在运行期间调用实际欲绑定的函数。 当然编译器也就会为每一个内含虚函数的类加上一个成员变量,是一个指向该需函数表的指针(vptr)。 具体参阅“深入浅出MFC”和“Thinking in C++”。 虚函数要求函数名相同,参数类型和函数的返回值的类型也相同。如果上述有一项不符,即使写上
文档评论(0)