栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++模板

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++模板

我们在写C语言的时候,如果要实现多个类型数据的交换,要给他们调用的函数起不同的名字,到了C++后,有了函数重载,来实现不同数据类型数据交换的多个函数可以起一样的名字,但是这样同样不太方便,有没有一种方法可以只写一个函数,不管来什么数据都可以对他们进行交换

为此C++采用泛型编程来实现一个通用的函数,相当于是一个浇筑的模板,我们填进去的数据就是不同的材料,填进去的是铁出来的就是铁锤子,填进去的是金出来的就是金锤子

先来看一个交换函数的模板

template
void Swap(T& left, T& right) 
{
	T temp = left;
	left = right;
	right = temp;
}

typename 就是拿来定义模板参数的关键字,它本身并不是一个函数,也就是说我们在调用Swap函数的时候调用的不是模板,而是调用根据我们填入的数据类型自动推导出的新函数。因此模板本身也没有地址

有函数模板当然也有类模板,函数模板在实例化的时候通过填入的参数来推导模板参数应该使用的类型,这种实例化叫隐式实例化,而类模板在初始化的时候不填入参数又如何确定模板参数的类型呢,这个时候就要用显式实例化,我们去手动指定它的类型,当然模板参数也可以有默认参数

Swap(a,b);       //隐式实例化

Swap(a,b);  //显式实例化
Vector A;

类模板的使用和函数模板类似

template
class Vector
{
public:
	Vector(size_t capacity = 10);
private:
	T* _pData;
	size_t _size;
	size_t _capacity;
};

模板可以声明和定义分离,但是他们必须放在一个文件中,否则会出现链接错误,如果要进行分离,每次定义之前都要写模板参数,也要指明类域。

模板参数也可以作为返回值,比方返回一个长度为n的数组,这个时候就需要我们指定模板参数的类型,我们是要返回char数组还是int数组,因为编译器无法推导出来我们想要的是什么

模板的优点是服用代码,节省了资源,增加了代码的灵活性,缺点则是会导致编译时间变长,在编译出错时不容易定位错误

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1002231.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号