下载正品官方网站,centos 下载wordpress,人才网最新招聘,做利基网站用备案前言#xff1a;哈喽小伙伴们好久不见#xff0c;这是2024年的第一篇博文#xff0c;我们将继续C的学习#xff0c;今天这篇文章#xff0c;我们来习一下——模版。 目录
一.什么是模版
二.模版分类
1.函数模版 2.类模板
总结 一.什么是模版
说起模版#xff0c;我们…前言哈喽小伙伴们好久不见这是2024年的第一篇博文我们将继续C的学习今天这篇文章我们来习一下——模版。 目录
一.什么是模版
二.模版分类
1.函数模版 2.类模板
总结 一.什么是模版
说起模版我们都很容易想到套模版这个词汇给你一个固定的格式然后按照这个格式去完成你的作品之类的。
而我们C中的模版也确实如此它包括函数模版和类模版两种它的格式为 templatetypename/class T1....... void fun(T1 .....) 其中template是定义模版的关键字而typename和class则是定义模版参数的关键字二者都可以使用模版的参数可以不止一个T1就代表一个要套用模版的参数类型而T1并不是固定的写法而是因为类型的英文为type而一般情况下都默认为T。
要注意的是定义模版之后要使用模版的函数要紧挨定义二者中间不能有任何其他代码。 二.模版分类
1.函数模版
我们经常使用swap交换函数这个简单的函数但是有一个问题是普通的函数只能定义单一的参数类型就算可以使用typedef来重定义在改变类型时我们也需要不断的修改这依然不是很方便。
所以我们引入了函数模版这个概念使用函数模版定义的函数无论传入任意类型的参数都可以实现其功能。
下面我们就以swap交换函数为例来介绍模版的具体用法
#includeiostream
using namespace std;
templatetypename T
void Swap(T a, T b)
{T temp a;a b;b temp;
}
int main()
{int a 1;int b 2;Swap(a, b);cout a b endl;double x 1.1;double y 2.2;Swap(x, y);cout x y endl;}
如上套用模版的函数其参数类型即为T随后在使用时我们只需要将要交换的数据传入T便会接收并自动转换为该实参的类型即可完成不同类型的实参共用一个函数的结果 但是这样的写法却只能满足相同类型实参直接的交换如果想要操作不同类型的实参则需要模版函数也存在同样数量的参数类型数量
#includeiostream
using namespace std;templatetypename T1,typename T2void Add(T1 a, T2 b)
{cout a b endl;
}
int main()
{int a 1;double b 2.2;Add(a, b);return 0;
}
在调用函数模版时T1便会接受a的类型T2则接收b的类型结果如下 除此之外一个模版函数还可以与一个同名的非模版函数同时存在这类似于函数重载
#includeiostream
using namespace std;templatetypename T1,typename T2void Add(T1 a, T2 b)
{cout a b endl;
}
void Add(int a, int b)
{cout a b endl;
}
int main()
{int a 1;int c 2;double b 2.2;Add(a, c);Add(a, b);return 0;
}
当这种情况存在时Add函数会默认先去调用非模版参数去判断参数类型是否一致一致则使用该非模版函数不一致则去调用模版函数。 2.类模板
类模版的写法就和函数模版类似了其作用都是将一些类型不确定或是经常改变的变量的类型用模版去代替。比如我们实现一个顺序表
templatetypename T
class Qlist
{
public:void Pushback(T a, T n){....}
private:T* _a;int _size;int _capacity;
};
int main()
{Qlistint q;return 0;
}
我们只需要在创建顺序表时给出数据类型即可。 总结
模版的内容比较简单就分享到这里。
喜欢博主文章的小伙伴记得一键三连我们下期再见