C++泛型编程基本概念详解( 二 )
2)对于非模板函数和同名模板函数 , 如果其他条件都相同 , 在调动时会优先调用非模板函数而不会从该模板产生出一个实例 。如果模板可以产生一个具有更好匹配的函数 , 那么将选择模板 。
int Add(int left, int right)// 专门处理int的加法函数{ return left + right;}template<class T1, class T2>// 通用加法函数T1 Add(T1 left, T2 right){ return left + right;}void Test(){Add(1, 2); // 与非函数模板类型完全匹配 , 不需要函数模板实例化Add(1, 2.0); // 模板函数可以生成更加匹配的版本 , 编译器根据实参生成更加匹配的Add函数}
3.类模板
(1)类模板的定义格式template<class T1, class T2, ..., class Tn>class 类模板名{ // 类内成员定义};
【C++泛型编程基本概念详解】// 动态顺序表// 注意:Vector不是具体的类 , 是编译器根据被实例化的类型生成具体类的模具template<class T>class Vector{public : Vector(size_t capacity = 10) : _pData(new T[capacity]) , _size(0) , _capacity(capacity){}// 使用析构函数演示:在类中声明 , 在类外定义 。~Vector(); void PushBack(const T& data); void PopBack();// ... size_t Size() {return _size;} T& operator[](size_t pos) {assert(pos < _size);return _pData[pos]; }private: T* _pData; size_t _size; size_t _capacity;};// 注意:类模板中函数放在类外进行定义时 , 需要加模板参数列表template <class T>Vector<T>::~Vector(){ if(_pData) delete[] _pData; _size = _capacity = 0;}
(2)类模板的实例化类模板实例化与函数模板实例化不同 , 类模板实例化需要在类模板名字后跟<> , 然后将实例化的类型放在<>中即可 , 类模板名字不是真正的类 , 而实例化的结果才是真正的类 。
// Vector类名 , Vector<int>才是类型Vector<int> s1;Vector<double> s2;
总结本篇文章就到这里了 , 希望能给你带来帮助 , 也希望您能够多多关注趣讯吧的更多内容!
推荐阅读
- DirectX是什么
- 编程软件有哪些
- 软件编程语言有几种
- 中学生怎么学编程
- plc工作原理
- minpro编程器怎么使用
- 什么叫编程编程课是指什么
- 少儿编程学习什么算法
- 全自动洗衣机怎么设置自编程序
- plc编程用什么软件
