大家好,欢迎来到IT知识分享网。
1.模板
1.1 模板出现的原因
- 为了代码重用;
- 使重用的代码不受数据类型的限制
1.2 函数模板
函数模板可以用来创建一个通用功能的函数,以支持多种不同形参,简化重载函数的设计。
模板函数的定义
template<模板参数表> 函数返回类型 函数名(形参列表) {
函数体; }
注意
- 模板参数表可以有多个,用逗号分开,但是不能为空
- 模板类型参数(template type parameter)代表一种类型,由关键字 class 或 typename)后加一个标识符构成,在这里两个关键字的意义相同,它们表示后面的参数名代表一个潜在的内置或用户定义的类型。
模板函数的使用方法
#include <iostream> #include <algorithm> #include <vector> #include <typeinfo> using namespace std; template<typename Type> void Print(vector<Type>& vec) {
cout<<typeid(Type).name()<<"---->"; for(int i = 0;i < vec.size();i++) {
cout<<vec[i]<<" "; } cout<<endl; } int main(void) {
vector<int> vet{
1,2,3,4,5}; vector<char> vec{
'a','b','c','d','e'}; vector<float> vef{
1.1,2.1,3.1,4.1,5.1}; Print(vet); Print(vec); Print(vef); return 0; }
总结
函数模板根据一组实际类型构造出独立函数的过程通常是隐式发生的,称为模板实参推演(template
argument deduction)。
为了判断模板实参的实际类型,编译器需检查函数调用中提供的函数实参的类型。ia 的类型为 int 数组,dx的类型为 double 数组。都被用来决定每个实例的模板参数。该过程称为模板实参推演在编译 main0函数中,由编译函数模板(functron template) 而生成的函数,称为模板函数(templatefunction)。这两个概念须分清楚
1.2 类模板
类模板定义如下:
模板定义如下 template<类型模板或参数表> class 类名{
...... //类声明体 }; template<模板参数表> 返回类型 类名<类型模板或参数表>::成员函数名 1(形参表){
//成员函数定义体 } template<模板参数表> 返回类型 类名<类型模板或参数表>:成员函数名 n(形参表)......; //成员函数n {
定义体n }
模板参数有两种:模板类型参数和模板非类型参数
从通用的类模板定义中生成类的过程称为模板实例化 (template nstantiation)
其格式为:类名<类模板实在参数表>对象名
使用举例
#include <iostream> #include <algorithm> #include <vector> #include <typeinfo> using namespace std; template<typename Type> class SqStack {
private: Type* data; int capacity; int pos; public: SqStack(int sz = 10){
data = new Type[sz]; capacity = sz; pos = -1; cout<<typeid(Type).name()<<endl; } ~SqStack(){
delete []data; } }; int main(void) {
SqStack<int> ist; SqStack<double> dst; return 0; }
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/157772.html