c++_4: 多态_3_纯虚函数和RTTI
来源:互联网 发布:淘宝雪纺短袖衫 编辑:程序博客网 时间:2024/06/07 03:59
多态数组
- 不要以多态的形势,处理数组
纯虚函数
virtual f() const=0;
对象切片
- 虚函数或者向上类型转换,对于对象,使用值传递,而不是引用或者指针,会被切片为合适于目的子对象
- 换句话,虚函数无效,变为向上类型转换
运行时多态
- C++支持多态:虚函数+RTTI+向上类型转换
- 向上类型转换
- 虚函数
- RTTI=向下类型转换
虚函数的不足
//家用电器管理系统的设计//抽象基类定义公共操作class HomeED{ public: virtual void open()=0; virtual void close()=0; virtual void Adjust (bool updown)=0;};class EF: public HomeED // 电扇{ public: virtual void open()=0; virtual void close()=0; virtual void Adjust (bool updown)=0;};class ET:public HomeED // 电视{ public: virtual void open()=0; virtual void close()=0; virtual void Adjust (bool updown)=0; // virtual void playvcd(); // 播放vcd};enum Command{open,close,adust,palyvcd};class DeviceController //控制类{ public: Command GetCommand() {...} //获取命令 void ContolThem(HomeED); //控制方法};void DeviceController:: ContolThem(HomeED &devie){ Command cmd=GetCommand(); switch(cmd) { case OPEN: deive.open(); break; case CLOSE: deive.close(); break; ..... case playvcd: //遇到问题,无法实现 }}
- playvcd并非公共接口
RTTI
动态运行识别
* 异常处理机制+虚函数的补充
type_of
- 需要为RTTI提供一个type_of的类型
- RTTI的内存开销+type_of的内存开销
- RTTI运行时检索对象,需要时间开销
- 获取运行时type_of,操作符:typeid和daynamic_cast
- type_of由三个成员函数: operator==(),operator!=()和name()
typeid
- typeid,以对象或者类型为参数,返回一个匹配的const type_info对象—–表明该对象的确切类型
void DeviceController:: ContolThem(HomeED &devie){ Command cmd=GetCommand(); switch(cmd) { case OPEN: ..... case PLAYVCD: //遇到问题,无法实现 if(typeid(device)==typeid(Television)) //typeid重载了运算符==,所以可以比较左右,为真,则播放vcd { Televison *pTemp=static_cas<Television*>(&device); pTemp->PlayVCD(); } else { MsgBox("This device cannot play VCD!"); } }}
static_cast :
- device只可以是HomeED的派生类,因为抽象类不可以实例化
- static_cast告诉编译器device是什么类型
dynamic_cats<>
- typeid可以返回一个对象的确切类型,而不是基类型
- 识别继承后的动态识别
- upcast
- downcast
0 0
- c++_4: 多态_3_纯虚函数和RTTI
- c++_4: 多态_1_虚函数的定义
- c++_4:多态_2_虚函数的原理
- [C++]虚函数和纯虚函数
- C++之多态(纯虚函数+RTTI+异常处理)
- 【c++】纯虚函数和抽象类
- [C++]纯虚函数和抽象类
- 【C++】普通函数、虚函数和纯虚函数
- 【C/C++】纯虚函数
- 多继承,RTTI和虚函数
- 虚函数和纯虚函数用法(C++)
- C++:抽象基类和纯虚函数的理解
- C++:抽象基类和纯虚函数的理解
- C++:抽象基类和纯虚函数的理解
- C语言专题精讲篇_4.6.C语言宏定义与预处理、函数和函数库
- 虚函数与RTTI
- C++多态、虚函数、纯虚函数和抽象函数
- C++RTTI和反射机制
- Python——模块(2)
- C++11 标准新特性: 右值引用与转移语义
- 分析函数_PERCENT_RANK -- SQL Server 2012 & Hive
- java_50笔记
- ZOJ 3505 Yet Another Set of Numbers
- c++_4: 多态_3_纯虚函数和RTTI
- 做一个简单登录界面
- Spring注解使用方法
- JS定时处理函数setTimeout用法
- iOS CGRectDivide快速进行界面布局
- [Hiho]1015-KMP算法
- 几种常见的排序算法
- Command(命令)设计模式
- Android搜索栏遇到的问题记录