25.5.16(C++)

25.5.16(C++模板及相应知识学习)

个人情况简介:本人目前大一,软件工程专业。目前自学C++已大半个月左右,为进一步提高学习效率,打牢语言基础,故从今日开始我的写博客之路,以此记录自己的学习历程。望共勉!

函数模板的概念

  • C++中的“模板”是什么?回顾过往学习生涯,不妨望文生义,其实“模板”就是一个可以“套用”的东西。那么在C++中,“模板”本质就是为了“套”代码,提高代码复用性。

函数模板的基本语法

template<class T>   //class——声明创建模板
                    //class——表明其后面的符号是某种数据类=类型
                    //T——通用数据类型。通常为大写字母,可替换,但最好就写T

函数模板的作用

  • 建立通用函数,其函数返回值类型和形参类型可以不具体制定,用一个虚拟类型来代表,也就是大写的“T”。

函数模板的使用

  • 在了解函数模板的概念、基本语法以及作用之后,那么接下来就该学习函数模板该如何使用了。
  • 1:自动类型推导(以交换整形函数为例)
template<class T>   //声明一个模板
void mySwap(T& a, T& b)   
{
	T temp = a;
	a = b;
	b = temp;
}
  • 2:显示指定类型(以交换整形函数为例)
template<class T>   //声明一个模板
void mySwap(T& a, T& b)   
{
	T temp = a;
	a = b;
	b = temp;
}

void test01()
{
	int a = 10;
	int b = 20;
	
	mySwap<int>(a, b);   //"int"是告诉模板参数“T”是“int”类型
	
	cout << "交换后a = " << a << endl
		 << "交换后b = " << b << endl;
}
  • 总结:此代码以“T”来指代未具体制定的参数类型,也就是类型参数化。通过模板让Swap函数自动识别所传入变量的数据类型,从而使传入不同的数据类型都会被自动识别并使用Swap函数模板,以此达到“套用”的目的。

函数模板的注意事项

  • 1:自动类型推导,必须推导出一致的数据类型T才可以使用
template<class T>
void mySwap(T& a, T& b)
{
	T temp = a;
	a = b;
	b = temp;
}

//1、自动类型推导 必须推导出一致的数据类型T才可以使用
void test01()
{
	int a = 10;
	int b = 20;
	char c ='c';

	//mySwap(a, b);   //推导出一致的数据类型
    //mySwap(a, c);   //推导出不一致的数据类型

	cout << "a = " << a << endl
         << "b = " << b << endl;
}

在自动数据类型推导下,函数模板里的数据类型必须要是相同的数据类型才可以使用函数模板,若不同则无法使用。

  • 2:模板必须要确定出T的数据类型才可以使用
template<class T>
void func()
{
	cout << "func 的调用" << endl;
}

void test02()
{
	func<int>();
}

若调用的函数模板未指定数据类型,要想成功使用函数模板,要么删除所调用函数前的声明模板的代码,要么显示指定类型,直接告诉声明函数模板中“T”的数据类型,因为模板必须要确定出T的数据类型才可以使用!

  • 总结:使用模板时必须确认出通用数据类型T,并要能够推导出一直的数据类型

你可能感兴趣的:(C++学习,c++,开发语言)