函数模板的基本语法

模板:

实际上是建立一个通用函数,其函数类型和形参类型不具体制定,用一个虚拟的类型来代表。这个通用函数就成为函数模

 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);

猜你喜欢

转载自blog.csdn.net/young__fan/article/details/80008999
今日推荐