c++静多态与动多态
来源:互联网 发布:淘宝店铺一共有多少分 编辑:程序博客网 时间:2024/06/06 04:28
多态是一种能够令单一的泛型标记关联不同的特定行为的能力。
在c++中多态主要是通过继承和virtual function来实现的。由于这两个机制都是在运行期进行处理的,因此称为动多态。然而模板也允许我们使用单一的泛型标记,来关联不同的特定行为这种关联是在编译器进行处理的,这种多态称为静多态。
动多态的缺点:在运行期不但每一个对象需要多分配一个指针大小的空间,更是在时间上,虚函数的调用需要间接的内存寻址动作,从而使得效率下降。
在c++中多态主要是通过继承和virtual function来实现的。由于这两个机制都是在运行期进行处理的,因此称为动多态。然而模板也允许我们使用单一的泛型标记,来关联不同的特定行为这种关联是在编译器进行处理的,这种多态称为静多态。
动多态的缺点:在运行期不但每一个对象需要多分配一个指针大小的空间,更是在时间上,虚函数的调用需要间接的内存寻址动作,从而使得效率下降。
静多态的优缺点:静多态会产生更多的代码,使得代码膨胀,而动多态不会有这种问题。但是静多态产生的代码的效率高于动多态因为其调用方式是静态链接的的,而且有更多inline机会。而且静多态在编译器就确定了有更好的类型安全性。
1通过虚函数和继承实现动态多态
#include<deque>#include<vector>#include<iostream>using namespace std;class shape{public:virtual void draw() = 0;virtual ~shape(){}};class rectangle:public shape{void draw(){cout << "shape" << endl;}};class circle :public shape{void draw(){cout << "circle" << endl;}};void draw_shape(shape &obj){obj.draw();}int main(){rectangle r;circle c;draw_shape(r);draw_shape(c);return 0;}2 通过模板实现静态多态
#include<deque>#include<vector>#include<iostream>using namespace std;template<typename draw_policy>class shape:public draw_policy{public:void draw_me(){this->draw();}};class circle{public:void draw(){cout << "circle" << endl;}};class rectangle{public:void draw(){cout << "rectangle" << endl;}};typedef shape<rectangle> rectle;typedef shape<circle> cir;template < typename T >void draw_shape(T &shape_obj){shape_obj.draw_me();}int main(){rectle r;cir c;draw_shape(r);draw_shape(c);return 0;}
0 0
- C-#与##
- [C与C++]
- GNU C与ANSI C
- c与c++?励志类
- [C/C++]scanf与sscanf
- C/C++:堆与栈
- GNU C与ANSI C
- GNU C与ANSI C
- GNU C与ANSI C
- GNU C与ANSI C
- 【C/C++】Cin与Cout
- 【C/C++】unsigned与二进制
- c 字符串与C++string
- GNU C与ANSI C
- C与指针、C陷阱与缺陷
- C 与Java比较- -
- C与C++
- 汇编与C....
- 183.Wood Cut-木材加工(中等题)
- 一个优秀的Android应用从建项目开始
- MAC OS X环境下配置APACHE+PHP+MYSQL+PHPMYADMIN!!!真是开头难啊
- Android Studio 调试 Native 、NDK,C
- Flask Web 开发学习笔记(一)
- c++静多态与动多态
- Linux学习---文件和目录的解压缩
- apk反编译smali调试
- lmdb 安装
- iOS网络判断
- CF 2C Commentator problem
- MSCNN 论文解析(A Unified Multi-scale Deep Convolutional Neural Network for Fast Object Detection
- jQuery和java后台的jsonp跨域问题
- PullToRefresh实现下拉刷新和上拉加载