CPP学习备忘[9] 多态
来源:互联网 发布:nginx 多server配置 编辑:程序博客网 时间:2024/06/05 17:05
【1】虽然从广义上说,数据类型是数据结构在一定的编程语言中的描述形式,但实际上描述群体数据(容器)的抽象数据类型才是数据结构的真正体现。
【2】类定义不占用任何内存空间,也没有任何对象的预处理,所以没有任何操作上的开销。
【1】一个操作随着所传递或捆绑的对象类型的不同能够做出不同的反应,其行为模式称为多态。
C++中采用一种滞后绑定技术来支持多态性,即滞后到运行时,根据具体类型的对象来捆绑成员函数。
【2】在C++中基类与派生类的同名操作,只要标记上virtual,则该操作便具有多态性。一旦标记基类的函数为虚函数,便有连锁反应,后面继承的类中一切同名成员函数都变成了虚函数。子类中的同名函数无需再用virtual进行声明。
用了虚函数的类,其对象的空间比不用虚函数的类多了一个指针的空间,用来指向虚函数列表,这会有一些效率影响。
【3】仅仅对于对象的指针和引用的间接访问才会发生多态现象。
静态成员函数不能是虚函数。
内联函数不能是虚函数。
析构函数可以是虚函数且通常声明为虚函数。
构造函数不能是虚函数。
【4】虚函数用于继承结构层次中的基类与子类。除了基类与子类的函数名必须相同外,连参数类型、个数和顺序都要相同,也就是说,基类和子类的虚函数不能只是名字重载。否则,成员函数即使标记上virtual,也不会被编译器做滞后处理。
【5】多态还可以扩展到每个对象可以动态地被识别,从而区分类型做只有该类型才能有的操作,而不是虚函数规定的操作,这样依赖于类型的动态转换;
dynamic_cast操作是专门针对有虚函数的继承结构来的,它将基类指针转换成想要的子类指针,以做子类操作的准备。dynamic_cas操作所针对的基类指针,如果所指向的对象中不含有想要的子类对象,则将得到0.
相对动态类型转换,静态类型转换则做范围更广的转换,但前提必须是相关的类型,也就是说,编译器必须认为可理解。Static_cast转换并不是专门针对指针的,只要是相关类型的转换,都可以操作。无非它主要是针对确定的类型,而不是针对多态。
从type类型转换到const type类型是允许的,但是原来是const type类型的,拒绝转换到type。这时可以使用开禁操作:const_cast<char*>,也就是去掉常量性的转换操作。
- CPP学习备忘[9] 多态
- CPP学习备忘[2] 数据类型
- CPP学习备忘[4] 性能
- CPP学习备忘[5] 程序结构
- CPP学习备忘[6] 类
- CPP学习备忘[8] 继承
- CPP学习备忘[12] 模板
- CPP学习备忘[13] 异常
- CPP学习备忘[1] 基本编程语句
- CPP学习备忘[7] 对象生灭
- CPP学习备忘[10] 抽象类
- CPP学习备忘[3] 计算表达及函数机制
- cpp备忘摘录
- 开始学习 firstAppView.cpp
- Effective CPP 学习笔记
- 学习cpp的笔记
- 关于九月学习CPP
- CPP学习笔记-1
- SQL日期函数应用
- 把普通表改为Partition表
- find命令详解(上)
- 下拉列表的onchange事件
- oracle 基本语法 (2)
- CPP学习备忘[9] 多态
- find命令详解(中)
- c++ virtual总结
- find命令详解(下)
- android image操作
- CPP学习备忘[10] 抽象类
- CPP学习备忘[12] 模板
- SQL注入技术和跨站脚本攻击的检测
- SIP架构