c++静多态与动多态

来源:互联网 发布:淘宝店铺一共有多少分 编辑:程序博客网 时间:2024/06/06 04:28
多态是一种能够令单一的泛型标记关联不同的特定行为的能力。
在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
原创粉丝点击