- 1、本文档共69页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第5讲_823409352
第五讲 多态性和虚函数 张洵 xunzh@mail.tsinghua.edu.cn 清华大学自动化系CIMS中心 主要内容 从C到C++的第一步: 一个更好的C. 基于对象的C++ 学习使用虚函数 模板与异常处理 MFC初步 内容回顾-第一讲 新的数据的输入与输出 cin、cout 文字处理和容器string、vector、ifstream 内联函数 inline 新的命名常量方法 const 常量:const int count = 5; 指针:char *const aptr = mybuf 指针:char const * aptr = mybuf 函数:const int* func(const int *input) const; 引用 int r = y 内存分配 new 和 delete 内容回顾-第二讲 复用已有的代码 源代码复用 二进制复用 结构(struct) =类(class) 数据+函数 隐藏实现(private,public,protected) 类的内联成员函数 类对象的指针 突破隐藏实现 友元 强行突破访问权限 句柄类 内容回顾-第三讲 构造函数和析构函数 数据的初始化与清除 缺省构造函数 构造函数的初始化列表 函数重载与缺省参数 成员函数、全局函数都可以重名; 只要参数不同,只要存在的范围不同 技术被称为“函数重载” 只有参数列表后部的参数才可以是缺省的,即不可以在缺省参数后再跟一个非缺省的参数 缺省参数的取值只能放在函数的声明中。为了阅读方便,在函数定义处通常将缺省取值在注释中给出。 缺省参数的声明可以不写参数名,只有类型与值 拷贝构造函数 运算符重载 内容回顾-第三讲 内容回顾-第三讲 运算符重载 内置类型靠语言定义的运算符进行运算,用户新定义的类型呢?---运算符重载! 没有重载的日子: 希望的形式: 内容回顾-第三讲 语法形式(非成员函数形式) Complex operator + (const Complex a, const Complex b) { Complex c; c.real = a.real + b.real; c.imag = a.imag + b.imag; return c; } 内容回顾-第三讲 关于C++中的运算符重载 运算符也是一种函数调用方式---除了名字函数以关键字operator开始,以运算符本身结束外,其定义与普通函数是一样的。 除非代码变得更容易写,尤其更容易读,否则不必重载运算符 所有用于仅包含内部数据类型的表达式的运算符是不可能被改变的!旧的一切照旧! 内容回顾-第三讲 内容回顾-第四讲 内容回顾-第四讲 内容回顾-第四讲 内容回顾-第四讲 内容回顾-第四讲 内容回顾-第四讲 继承与组合中的初始化问题 组合:子对象需要初始化 继承:基类部分需要初始化 下面两种情况下存在问题 继承的基类、组合进的子对象类没有缺省构造函数(因自定义了构造函数而禁止编译器自动生成) 希望用特定初始参数创建继承的基类、组合进的子对象类的对象 如何解决? C++构造函数初始化列表 内容回顾-第四讲 内容回顾-第四讲 构造与析构过程示意 内容回顾-第四讲 派生类重定义基类成员函数 改变函数的参数列表 改变函数的返回类型 改变函数的函数定义体 保持参数列表和返回类型,改变函数内容 虚函数重载 效果:派生类对象不再能直接访问基类成员函数,这其中包括未被派生类修改的基类重载函数的其他函数 内容回顾-第四讲 多重继承和虚基类 内容回顾-第四讲 内容回顾-第四讲 派生类对象转换成基类对象 内容 多态和虚函数 静态与动态联编 C++中多态 虚函数 虚析构函数 纯虚函数与抽象类 多态和虚函数 交响乐队的编制 交响乐队是音乐王国里的器乐大家族,一般来说它分为五个器乐组:弦乐组、木管组、铜管组、打击乐组和色彩乐器组。下面分组介绍各种乐器(它们都是从高音到低音的乐器): 弦乐组:小提琴、中提琴、大提琴、倍大提琴。 木管组:短笛、长笛、双簧管、英国管、单簧管、大管。 铜管组:小号、圆号、长号、低音号。 打击乐组:定音鼓、锣、镲、铃鼓、三角铁等。 色彩乐器组:钢琴、竖琴、木琴、铝板钟琴等。 这个信息不是我们想要的 原因是函数调用是在编译 期间确定的 编译器只知道传给tune的 类型是instrument,所以 它只会安排调用基类函数 希望能根据对象的实际类型来调用正确的函数! 怎么改程序呢? 解决之道:虚函数! 这样行不行?为什么? 多态的定
文档评论(0)