美文网首页
C++基础学习笔记(六):函数模板和类模板

C++基础学习笔记(六):函数模板和类模板

作者: 于同学的学习空间 | 来源:发表于2019-04-02 20:59 被阅读0次

函数模板

在C++程序中,经常能看到以 template<class T> 等形式的语句,这其实就是应用了模板的知识,在C++中,凡是出现了类似的语句,我们都可以认为是一种泛型化的编程,所谓泛型编程,就是指不再拘泥于某种特定类型的变量来编写函数或类,而是随着程序的需求,来自动转换成为程序需要的类型,比如编写一个交换两数的函数,不确定要交换的是两个整形数还是两个double型数据,在这种情况下,就可以使用模板,等到程序确定了要交换何种类型的变量时,再根据相应情况转换,如下所示:

template <class T>
void Swap(T x, T y)
{
    T tmp = x;
    x = y;
    y = tmp;
}

首先,模板原型如下所示:

template <class 类型参数名>   //class 可用 typename 替换

在上个函数中,T 就成为了这里的类型参数名,在实际应用时,如果 x 和 y 赋为 int 型,那么 T 就被转换成 int 型。
下面是返回数组最大元素的函数:

template <class T>
T FindMaxNum(T a[],int size)
{
    T MaxNUm = a[0];
    for(int i = 1;i < size; ++i)
        if(MaxNUm < a[i])
            MaxNUm = a[i];
    return MaxNUm;
}

当然,模板也可以有不同的类型参数,比如:

template <class T1,class T2>

这样可以有效避免参数类型的二义性
值得注意的一点是,函数模板是可以重载的,只要形参表不同即可。
在学习C++的基础课程时,遇到了这么一个知识点,如果程序调用了一个函数,编译器将按照以下顺序去匹配相应的函数原型:

Step 1:寻找参数完全匹配的普通函数(即不是由模板实例化得到的函数)
Step 2:寻找参数完全匹配的模板函数
Step 3:寻找实参经过自动类型转换后能够匹配的普通函数
Step 4:上面的都无法匹配,则报错

类模板

类模板的使用方法与函数模板相差不大,但也有区别,类模板要考虑的东西会更多,首先来看一下类模板的声明:

template <class 类型参数1, 类型参数2, ......>
class 类模板名
{
         成员函数和成员变量
};

如果成员函数在类模板的外面定义时,要写成如下格式:

template 型参数表
返回值类型 类模板名<类型参数名列表>::成员函数名(参数表)
{
    ......
}

以下是一个实例:

#include <iostream>

using namespace std;

template<class T>
class Square
{
public:
    T SideLength;
    void input(T a);
    void output(void);
};

int main()
{
    Square<int> square;    //写出参数类型
    square.input(5);
    square.output();
    return 0;
}

template<class T>
void Square<T>::input(T a)    //成员函数写在外部时,要遵循这个格式
{
    SideLength = a;
}

template<class T>
void Square<T>::output(void)
{
    T a = SideLength;
    cout << a*a << endl;
}

相关文章

  • 模板特化

    模板是C++泛型编程编程的基础,STL从头到尾都是模板泛型编程 函数模板 类模板 几个需要注意的点1. 类模板的和...

  • C++基础学习笔记(六):函数模板和类模板

    函数模板 在C++程序中,经常能看到以 template 等形式的语句,这其实就是应用了模板的知...

  • 10-C++远征之模板篇-学习笔记

    C++远征之模板篇 将会学到的内容: 模板函数 & 模板类 -> 标准模板类 友元函数 & 友元类 静态数据成员 ...

  • 慕课网-C++远征之模板篇(上)-学习笔记

    C++远征之模板篇 将会学到的内容: 模板函数 & 模板类 -> 标准模板类 友元函数 & 友元类 静态数据成员 ...

  • C++ 模板开发

    C++模板开发分为两类: 模板函数开发 模板类开发 模板函数语法: template是关键字,

  • C++类模板

    一、定义 C++ 类模板 定义一个 C++ 类模板和定义一个函数模板类似,可以指定一个或者多个模板参数标识符。在类...

  • Geekband C++ 第五周

    概述 C++模板简介 函数模板 C++类模板 操作符重载 泛型编程 容器

  • STL与泛型编程第一周笔记 GeekBand

    本周学习的内容有点多,主要学习了C++中的模板(包括函数模板和类模板)、泛型编程概述和三种容器(vector,de...

  • C++ STL初识及整理

    概述 简介 简单介绍:C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些...

  • 【C++ Templates(11)】深入模板基础

    参数化声明 C++现在支持四种基本模板:类模板,函数模板,变量模板(variable template),别名模板...

网友评论

      本文标题:C++基础学习笔记(六):函数模板和类模板

      本文链接:https://www.haomeiwen.com/subject/pwrnbqtx.html