zoukankan      html  css  js  c++  java
  • 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.当模板的泛化处理不适合某个特定的数据类型时,可针对这个数据类型给出相应的模板,包括函数模板特化和类模板特化(叫完全特化技术也叫精确特化)

  • 相关阅读:
    搜索回车跳转页面
    登录验证码
    【排序算法】排序算法之插入排序
    PAT 乙级 1044 火星数字 (20 分)
    PAT 甲级 1035 Password (20 分)
    PAT 甲级 1041 Be Unique (20 分)
    PAT 甲级 1054 The Dominant Color (20 分)
    PAT 甲级 1027 Colors in Mars (20 分)
    PAT 甲级 1083 List Grades (25 分)
    PAT 甲级 1005 Spell It Right (20 分)
  • 原文地址:https://www.cnblogs.com/zhangaihua/p/3718093.html
Copyright © 2011-2022 走看看