函数模板及注意事项

本文详细介绍了C++中的函数模板,包括其作用(通用函数、提高复用性)、语法(template关键字和typename/class的区别)、以及使用方法(自动类型推导与显示指定类型)。同时强调了模板使用时的注意事项:确保类型一致性。
摘要由CSDN通过智能技术生成

一、函数模板

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

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

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

语法:

template<typename T>
or
template<class T>
函数声明或定义

解释:

template --- 声明创建模板

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

T --- 通用的数据类型,名称可以替换,通常为大写字母

#include<iostream>
using namespace std;

//函数模板

//交换两个整形函数
void swapInt(int &a, int &b)
{
	int temp = a;
	a = b;
	b = temp;
}

//交换两个浮点型函数
void swapDouble(double &a, double &b)
{
	double temp = a;
	a = b;
	b = temp;
}

//函数模板
template<typename T>	//声明一个模板,告诉编译器后面代码中紧跟着的T不要报错,T是一个通用数据类型
void mySwap(T& a, T& b)
{
	T temp = a;
	a = b;
	b = temp;
}

void test()
{
	int a = 10;
	int b = 20;

	//swapInt(a, b);
	//利用函数模板交换
	//有两种方式使用模板
	
	//1.自动类型推导
	//mySwap(a, b);
	
	//2.显示指定类型
	mySwap<int>(a, b);
	

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

	//double c = 1.1;
	//double d = 2.2;

	//swapDouble(c, d);

	//cout << "c = " << c << endl;
	//cout << "d = " << d << endl;
}



int main()
{
	test();
	return 0;
}

总结:

函数模板利用关键字 template

使用函数模板有两种方式:自动类型推导、显示指定类型

模板的目的是为了提高复用性,将类型参数化

二、函数模板注意事项

1.自动类型推导,必须推导出一致的数据类型T才可以使用

2.模板必须要确定出T的数据类型,才可以使用

#include<iostream>
using namespace std;

//函数模板注意事项
template<class T>	//typename可以替换成class
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);//错误!推导不出一致的T类型
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
}

//2.模板必须要确定出T的数据类型,才可以使用
template<class T>
void func()    //函数体中未用到T,调用时需要用到
{
	cout << "func函数的调用" << endl;
}

void test02()
{
	func<int>();//未加int则出错,需要显示指定类型
}


int main()
{
	//test01();
	test02();

	return 0;
}

总结: 使用模板时必须确定出通用数据类型T,并且能够推导出一致的类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值