C++模板的使用

模板用于泛型编程

模板类

  •  模板定义的函数或者类在编译的时候实例化出来
  •  在需要定义为模板的类或函数前加上template< typename T>
  •  模板定义过的类名在同一作用域下,无法再次定义为普通类,但是可以特例化为指定类型模板类
  • 特例化的模板类的内部结构可以和其对应的模板类内部结构不同,这也是特例化模板类的意义

模板函数

  • 模板函数和普通函数可以重名
  • 编译器调用,模板函数和普通函数的顺序为:如果有参数类型相同的重载函数,优先调用重载函数,没有重载函数则调用相应模板函数
  • 模板函数的实例化方法:根据调用函数的实参的值,来推出模板函数的形参和返回值的类型,完成实例化
#include<string>
#include<iostream>
using namespace std;

template <typename T=char>
class A{
public:
    A(){cout<<"模板"<<endl;}

};

template <> //特例化模板1
class A<int>{
public:
    A(){cout<<"调用fei模板"<<endl;}
    int b;
};
template <> //特例化模板2
class A<string>{
public:
    A(){cout<<"调用2模板"<<endl;}
    string b;
};

template <typename F2,typename F3>
F2 test(F2 x,F3 y){

    cout<<x<<" "<<y<<endl;
    return x;
}
void test(){
    cout<<"dasd"<<endl;
}

char test(int x,char y){ //函数重载
    cout<<x<<"+"<<y<<endl;
    return x;
}

int main(){
    A<> a;
    A<string> b;
    A<int> c;
    test(8,'d');   //这里优先调用匹配成功的重载函数,
    //如果没有匹配成功的重载函数,再调用模板函数
    test(8,8);
    test();
}

 运行结果如下

 

模板
调用2模板
调用fei模板
8+d
8 8
dasd

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值