模板:
实际上是建立一个通用函数,其函数类型和形参类型不具体制定,用一个虚拟的类型来代表。这个通用函数就成为函数模
板
c++提供两种模板机制:函数模板和类模板
类属- 类型参数化,又称参数模板
使得程序(算法)可以从逻辑上抽象,把被处理的对象(数据)类型作为参数传递。
用模板是为了实现泛型,可以减轻编程的工作量,增强函数的重用性。
基本语法如下:
template<class T> //template<typename T> 也可以这么写,
void MySwap(T &a, T&b)
{
T temp = a;
a = b;
b = temp;
}
/**
*Copyright (c) 2018 Young Fan.All Right Reserved.
*Filename: 1 template.cpp
*Author: Young Fan
*Date: 2018.4.19
*IDE: Visual Studio 2017
*Description: 函数模板的基本语法
*/
#include<iostream>
using namespace std;
#if 0
//int类型的数据交换
void MySwap(int &a, int &b)
{
int temp = a;
a = b;
b = temp;
}
//double类型的数据交换
void MySwap(double &a, double &b)
{
double temp = a;
a= b;
b = temp;
}
#endif
//每种格式都要写一种,很麻烦,为此引出模板函数
//用模板是为了实现泛型,可以减轻编程的工作量,增强函数的重用性。
//模板技术,类型参数化,编写代码可以忽略类型
//为了让编译器区分是普通函数还是模板函数
//告诉编译器我下面写的是模板函数,不是奇怪的东西,不要报错
template<class T> //template<typename T> 也可以这么写,
void MySwap(T &a, T&b)
{
T temp = a;
a = b;
b = temp;
}
void test1()
{
int a = 10;
int b = 20;
//1.自动类型推导
cout << " a = " << a << ", b = " << b << endl;
MySwap(a,b);//编译器会根据所传的值,进行类型的自动推导
cout << " a = " << a << ", b = " << b << endl;
double da = 1.18;
double dd = 2.36;
cout << " da = " << da << ", dd = " << dd << endl;
MySwap(da, dd);
cout << " da = " << da << ", dd = " << dd << endl;
//2.显式地指定类型
MySwap<int>(a,b);
cout << " a = " << a << ", b = " << b << endl;
}
int main()
{
test1();
return 0;
}
总结:
模板把函数或类要处理的数据类型参数化,表现为参数的多态性,成为类属。
模板用于表达逻辑结构相同,但具体数据元素类型不同的数据对象的通用行为。
显式地指定类型,可以按照下面的方式写:
MySwap<int>(a,b);