C++模板

本文详细介绍了C++中的泛型编程,包括函数模板如何通过<T>声明通用函数、类模板的特点和使用,以及模板与普通函数的调用规则。实例演示了mySwap、mySort和printArr模板的用法,以及模板在不同情境下的应用。
摘要由CSDN通过智能技术生成

C++另一种编程思想称为泛型编程,主要利用的技术就是模板。

C++提供两种模板机制:函数模板和类模板


函数模板

建立一个通用函数,其函数返回值类型和形参类型可以不具体制定,用一个虚拟的类型来代表。

template<typename T>

template:声明创建模板

typename:表示后面的符号是一种数据类型,可以用class代替

T:通用数据类型

举例:

//交换模板
template<typename T>
void mySwap(T & a,T & b)
{
	T temp=a;
	a=b;
	b=temp;
}

//排序模板
template<typename T>
void mySort(T arr[],int len)
{
	for(int i=0;i<len;i++)
	{
		int max=i;
		for(int j=i;j<len;j++)
		{
			if(arr[max]<arr[j])max=j;
		}
		if(max!=i)
		{
			mySwap(arr[max],arr[i]);
		}
	}
}

//打印模板
template<class T>    //用class的效果和typename一样
void printArr(T arr[],int len)
{
	for(int i=0;i<len;i++)
	{
		cout<<arr[i];
	}
	cout<<endl;
}

//测试
void test1()
{
	char charArr[]="basdf";
	int num=sizeof(charArr) / sizeof(char);

    //自动类型推导
    mySort(charArr,num);
	printArr(charArr,num);	
}

void test2()
{
	int intArr[]={5,8,4,1,2,3,9,7};
	int num=sizeof(intArr) / sizeof(int);

    //给出确定的数据类型
	mySort<int>(intArr,num);
	printArr<int>(intArr,num);
}

普通函数和函数模板的调用规则

  1. 如果函数模板和普通函数都可以实现,优先调用普通函数
  2. 可以通过空模板参数列表来强制调用函数模板
  3. 函数模板也可以发生重载
  4. 如果函数模板可以产生更好的匹配,优先调用函数模板

类模板

类模板和函数模板的区别

  • 类模板没有自动类型推导的使用方式
  • 类模板在模板参数列表中可以有默认参数

template<class NameType,class AgeType =int>    //默认参数

类模板中成员函数创建时机

普通类中的成员函数一开始就可以创建

类模板中的成员函数在调用时才创建

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值