C++::多态那点事~~
2016-12-11 20:40
260 查看
首先我们先来了解下对象模型:
【对象模型】:
eg:
接下来我们进入多态的世界:
【多态】
一、多态的定义:
多态:“一个接口,多种方法”,具有多种形式多种形态指的是指相同对象收到不同消息或不同对象收到相同消息时产生不同的实现动作。
二、多态的分类
1、静态多态:
1)静态多态设计思想:对于相关的对象类型,直接实现它们各自的定义,不需要共有基类,甚至可以没有任何关系。只需要各个具体类的实现中要求相同的接口声明,这里的接口称之为隐式接口。客户端把操作这些对象的函数定义为模板,当需要操作什么类型的对象时,直接对模板指定该类型实参即可(或通过实参演绎获得)
2)静态多态的实现:
编译器在编译期间完成的,编译器根据函数实参的类型(可能会进行隐式类型转换),可推断出要调用哪个函数,如果有对应的函数就调用对应的,如果没有,编译器就会报错。
2、动态多态
1)动态绑定:在程序执行期间判断所引用对象的实际类型,根据实际类型调用相应的方法
2)实现:利用虚函数实现
3)具体实现动态绑定的条件:
A:基类的函数必须是虚函数
B:必须通过基类的引用或者指针来调用虚函数
最后我附一张继承体系中同名成员函数关系的图:
【对象模型】:
eg:
接下来我们进入多态的世界:
【多态】
一、多态的定义:
多态:“一个接口,多种方法”,具有多种形式多种形态指的是指相同对象收到不同消息或不同对象收到相同消息时产生不同的实现动作。
二、多态的分类
1、静态多态:
1)静态多态设计思想:对于相关的对象类型,直接实现它们各自的定义,不需要共有基类,甚至可以没有任何关系。只需要各个具体类的实现中要求相同的接口声明,这里的接口称之为隐式接口。客户端把操作这些对象的函数定义为模板,当需要操作什么类型的对象时,直接对模板指定该类型实参即可(或通过实参演绎获得)
2)静态多态的实现:
编译器在编译期间完成的,编译器根据函数实参的类型(可能会进行隐式类型转换),可推断出要调用哪个函数,如果有对应的函数就调用对应的,如果没有,编译器就会报错。
2、动态多态
1)动态绑定:在程序执行期间判断所引用对象的实际类型,根据实际类型调用相应的方法
2)实现:利用虚函数实现
3)具体实现动态绑定的条件:
A:基类的函数必须是虚函数
B:必须通过基类的引用或者指针来调用虚函数
最后我附一张继承体系中同名成员函数关系的图:
相关文章推荐
- 从C++到.NET 揭开多态的面纱
- 对C++中虚函数、纯虚函数在多态中作用的一点认识
- C++对象布局及多态实现探索之内存布局
- 用C实现C++的多态---剖析GTK的"对象" (四)
- c++ 如何实现多态
- C++多态汇编分析
- C++对象布局及多态实现探索之内存布局
- 用C实现C++的多态---剖析GTK的"对象" (一)
- 用C实现C++的多态---剖析GTK的"对象" (三)
- C++和java中多态机制的异同
- 当多态遇上数组 ... [C++] (Rewritten)
- C++特性探寻-多态和虚函数
- C++对象布局及多态实现探索之内存布局(转载)
- C++中的虚函数和多态的关系
- C++的多态
- C++_对多态的理解
- 当多态遇上数组 ... [C++] (Rewritten)
- 有关C++多态的一些测试
- C++有关类、继承、多态、构造、析构、重载
- C++ 虚函数 多态