• C++中的模板(函数模板,类模板)


    1.模板是生成类或函数的框架,模板使用形参,当实际数据类型赋值给形参的时候,才由编译器生成类或函数

    2.函数模板的声明由关键字template和包含一个或多个数据类型形参的参数列表构成,形参数据类型(T)前面可以是class也可以是typename,类型形参T要用尖括号<>括起来:

    Template <typename T>或Template<classT>

    3.函数模板的调用

    #include "stdafx.h"

    #include<stdio.h>

    template <class T>

    T max(T a,T b)

    {

        returna>b?a:b;

    }

    int _tmain(int argc, _TCHAR* argv[])

    {

        printf("%d ",max(3,10));//更ü完�?善?写′法ぁ�ax<int>(3,10)

        printf("%f ",max<double>(21.3,20.1));

        return 0;

    }

    4.用作模板的类型可以是基本类型,也可以是一个类,类似于函数模板的做法,类模板对成员数据和成员函数的参数类型进行泛化,下面是一个模板类A,构造函数和comp函数均在模板声明中定义,成为内联函数,print_Type函数在模板外定义,需要用关键字template说明T1和T2是模板类型,并以A<T1,T2>::做函数的前缀作用域

    //templae2.cpp : 定¨义?控?制?台�?应畖用?程ì序ò的?入?口ú点?。£

    //

    #include "stdafx.h"

    #include <stdio.h>

    #include <typeinfo.h>

    template <class T1,class T2>

    class A{

        T1 i;

        T2 j;//

    public:

        A(T1 t1,T2 t2){i=t1;j=t2;}//内联函数

        bool comp(){return i>j;}//内联函数

        voidprint_Type();//函数声明

    };

    //成员函数printf_type定义

    template <class T1,class T2>

    voidA<T1,T2>::print_Type(){

        printf("i的类型是%s ",typeid(i).name());//打印i的类型名

        printf("j的类型是?%s " typeid(j).name());

    }

    int _tmain(int argc, _TCHAR* argv[])

    {   A<int,double> a(3,89.2);

        if(a.comp())

        {

            printf("i>j ");

        }

        else printf("i<=j ");

        a.print_Type();

        return 0;

    }

    5.当模板的泛化处理不适合某个特定的数据类型时,可针对这个数据类型给出相应的模板,包括函数模板特化和类模板特化(叫完全特化技术也叫精确特化)

  • 相关阅读:
    swift学习二:基本的语法
    Unity3D游戏开发之开发游戏带来的问题
    Linux makefile 教程 很具体,且易懂
    匈牙利算法
    ExtJs自学教程(1):一切从API開始
    rman
    微软历史最高市值是多少?
    安装Oracle JDK 7.0与8.0 for Mac OS X后Eclipse启动报错的解决之道
    linux-sfdisk 使用方法
    未将对象引用设置到对象的实例--可能出现的问题总结
  • 原文地址:https://www.cnblogs.com/zhangaihua/p/3718093.html
Copyright © 2020-2023  润新知