zoukankan      html  css  js  c++  java
  • 模板

                                                                                           模板

    一.模板概述

    模板把函数或类要处理的数据类型参数化,表现为参数的多态性。模板用于表达逻辑结构相同,且具体数据元素类型不同的数据对象的通用行为,从而使得程序可以从逻辑功能上抽象,把被处理的对象(数据)类型作为参数传递。

    1.函数模板与模板函数

          在声明了一个函数模板后,当编译系统发现有一个对应的函数调用时,将根据实参中的类型来确认是否匹配函数模板中对应的类型形参,然后生成一个重载函数的定义体与函数模板的函数定义体相同,它称之为模板函数。

         函数模板是对一组函数的描述,它不是一个真实的函数,编译系统并不产生任何执行代码。

         函数模板与模板函数的区别:函数模板是一个模板,其中用到通用类型参数,不能直接执行。模板函数是一个具体的函数,它由编译系统在遇到具体函数调用时所生成,具有程序函数的返回值能取任意类型。

         2.类模板与模板类

          类模板允许用户为类定义一种模式,使得类中的某些数据成员、成员函数的参数和成员函数的返回值能取任意类型。

         在声明了一个类模板之后,可以创建类模板的实例,它称之为模板类。

         类模板与模板类的区别:类模板是一个模板,不是一个实实在在的类,其中用到通用类型参数。而模板类是一个类,可以由它定义对象。

    二.函数模板

    1.声明函数模板

       temple 类型形参表

       返回类型   函数名(形参表)

       {

           函数体;

       }  

     2.例子:

      temple  <class  T>

      T  abs (T  x)

      {

       if  (x<0)   return  -x;

       return  x

      }

     3.函数模板的使用

     函数模板是不能直接执行的,需要实例化为模板函数后才能执行。当编译系统发现有一个函数调用:

     函数名(实参表);

    C++将根据‘实参表’中的类型生成一个重载函数即模板函数。该模板函数的定义体与函数模板的函数定义体相同,而‘形参表’的类型则以‘实参表’的实际类型为依据。

    如以下语句实例化前面声明的函数模板:

     Abs(-10);

    由于-10int型,所以实例化为以下真正的模板函数:

    int  abs (int  x)

    {

      if  (x<0)   return  -x;

       return   x;

    }

    再以-10为参数调用该模板函数,执行结果是返回10

    三.类模板

    1.声明类模板

        temple 类型形参表

    Class   类名   

       {

           类声明体;

       }

    Template   类型形参表

    返回类型   类名  类型名表::成员函数1(形参表)

    {

       成员函数定义体;

    }

        Template   类型形参表

    返回类型   类名  类型名表::成员函数2(形参表)

    {

       成员函数定义体;

    }

    ................

    Template   类型形参表

    返回类型   类名  类型名表::成员函数n(形参表)

    {

       成员函数定义体;

    }

    2.例子

         template  <class T>

         Class   TClass1

         {

          T   x,y;

          public:

              TClass1(T  a,T  b)

              {

                x=a;

                y=b;

               }

          T   add()   {return   x+y;}

          Void   disp()

          {

            Cout << x << “+” << y << “=” <<add() << endl;

          }

      };

    3.类模板的使用

       同样,类模板不能直接使用,必须先实例化为相应的模板类,定义该模板类的对象后才能使用。

       “类型实参表”应与该类模板中的“类型形参表”相匹配。“对象表”是定义该模板类的一个或多个对象。

     

  • 相关阅读:
    VS2019 .Net Core 3.1 Web 项目启用动态编译
    IntelliJ IDEA自动注释作者信息和日期时间
    Could not transfer artifact org.springframework.boot:spring-boot-starter-parent:pom:2.2.1.RELEASE from/to
    MS SQL Server数据批量插入优化详细
    更改VisualStudio默认创建类和接口不加public问题
    WIN10 报错 "此共享需要过时的SMB1协议,而此协议是不安全"的解决方法
    Delphi XE8,C++ Builder XE8,RAD Studio XE8 官方 ISO 文件下载,附激活工具
    PC 安装MAC
    InnoSetup能够实现“安装细节描述”界面吗?
    在Unicode版Inno Setup中使用ISSkin
  • 原文地址:https://www.cnblogs.com/zhangmiao14/p/3764405.html
Copyright © 2011-2022 走看看