模板多态
来源:互联网 发布:我跟肌肉男的夜晚知乎 编辑:程序博客网 时间:2024/06/04 00:27
函数模板:
template <typename T>inline T const& Max (T const& a, T const& b) { return a < b ? b:a; }
类模板:
template <class T>class Stack { private: vector<T> elems; // elements public: void push(T const&); // push element void pop(); // pop element T top() const; // return top element bool empty() const{ // return true if empty. return elems.empty(); } }; template <class T>void Stack<T>::push (T const& elem) { // append copy of passed element elems.push_back(elem); } template <class T>void Stack<T>::pop () { if (elems.empty()) { throw out_of_range("Stack<>::pop(): empty stack"); }// remove last element elems.pop_back(); }
1. 动多态: 对于几个相关对象的类型,确定它们之间的一个共同功能集;然后在基类中,把这些共同的功能声明为多个虚函数接口。
如上,draw(), center_of_gravity() 都是主要的动态接口
2.静多态: 这种多态并不依赖基类中包含公共行为的因素,相关的函数具有相同的名称。
template<typename GeoObj>void myDraw(GeoObj const& obj){ obj.draw();}template<typename GeoObj1, typename GeoObj2>Coord distance(GeoObj1 const& x1, GeoObj2 const& x2){Coord c=x1.center_of_gravity()-x2.center_of_gravity();return c.abs();}int main(){Line l;Circle c, c1, c2;myDraw(l);myDraw(c);distance(c1,c2);}
动多态 和 静多态
- 通过继承实现的多态是绑定和动态的; 绑定是指参与多态行为的类型,它们接口是在公共基类的设计中就预先去定的,动态是指接口的绑定是在运行期(动态)完成的。这种情况下,可执行代码通常较小,完全编译;
- 通过模板实现的多态是非绑定的和静态的;接口的绑定在编译器(静态)完成的。 这种方法生成代码效率比较高,具有更好的类型安全性,静多态在编译期会对绑定操作进行检查。
参考:
《C++ Templates》
tutorialspoint.com/cplusplus/cpp_templates.htm
0 0
- 模板实现多态
- 模板多态
- 模板多态
- 模板的多态
- 模板实现多态
- 利用模板实现多态
- Day49、子类模板访问基类模板、模板型模板参数、嵌套模板的外部定义、“零”初始化、虚函数和多态、编译模型
- 使用模板来实现多态
- C++模板多态 ——Type2Type
- C++ Templates:模板的多态威力
- 模板和多态策略化加锁
- 实验7 多态与模板
- 多模板切换
- 多模板layout
- 多圆相交模板
- 多行模板字符串
- 模板
- 模板?
- html表单标记简单使用
- c++ string 路径处理
- HDOJ 题目3966 Aragorn's Story(Link Cut Tree成段加减点权,查询点权)
- WINCE应用程序全屏显示
- 2015 Multi-University Training Contest 5
- 模板多态
- 前端性能优化
- LeetCode: SingleNumIII
- 小米运维部14年校招笔试题A的个人答案
- a 标签绑定事件异常
- 状态栏被遮挡时的修改
- c++中按位取反运算,类型转换,扩位
- iOS笔记
- Oracle Profile