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\n",max(3,10));//更ü完?善?写′法ぁax<int>(3,10)

    printf("%f\n",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\n",typeid(i).name());//打印i的类型名

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

}

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

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

    if(a.comp())

    {

        printf("i>j\n");

    }

    else printf("i<=j\n");

    a.print_Type();

    return 0;

}

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

 

 

 

转载于:https://www.cnblogs.com/zhangaihua/p/3718093.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值