C++模板

       模板定义:模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数, 从而实现了真正的代码可重用性。模版可以分为两类,一个是函数模版,另外一个是类模版。

函数模板如下面的例子:

int func_max(int a, int b)
{
    return a>b?a:b;
}

      求两个整数的最大值,func_max()的参数为int类型,如果我们需要求两个float型数的最大值,必须定义一个几乎一模一样的函数,这样就很容易造成代码的冗杂和重复。

      为了解决类似的问题,C++衍生出了模板的概念。把类型参数化。

template <class T> T func_max(T a, T b)
{
    return a>b?a:b;
}

int main()
{

    int a1 = 1,a2 = 2;
    printf("result:%d\n",func_max(a1,a2));
    double b1 = 1.001,b2 = 0.003;
    printf("result:%f\n",func_max(b1,b2));

}

结果:

result:2
result:1.001000

这里的T就是指参数的类型,他可以表示int、float、double等等,但是它只能表示一种类型。例如在上面的例子当中,如果我们比较a1和b2,编译时则会报错。

template <class T> T func_max(T a, T b)
{
    return a>b?a:b;
}

int main()
{

    int a1 = 1,a2 = 2;
    printf("result:%d\n",func_max(a1,a2));
    double b1 = 1.001,b2 = 0.003;
    printf("result:%f\n",func_max(b1,b2));

    printf("result:%f\n",func_max(a1,b2));  //编译报错

}
template <class T,typename M> T func_max(T a, M b)
{
    return a>b?a:b;
}

int main()
{

    int a1 = 1,a2 = 2;
    printf("result:%d\n",func_max(a1,a2));
    double b1 = 1.001,b2 = 0.003;
    printf("result:%f\n",func_max(b1,b2));

    printf("result:%d\n",func_max(a1,b2));

}

如果需要参数化多个类型,写法如上。注意返回值为第一个参数的类型。模板中,用class或者typename都可以。

 

类模板用法和函数模板相差不大:

template <typename T,class M>
class Test
{
    private:
        T a;
        M b;
    public:
        Test(T a,M b)
        {
            this->a = a;
            this->b = b;
        }
        void show()
        {
            cout<<"first: "<<a<<endl;
            cout<<"second:"<<b<<endl;
        }
};

int main()
{

   Test<int,int> *test_1 = new Test<int,int>(3,5);
   test_1->show();

   Test<int,double> test_2(1,3.23);
   test_2.show();

   Test<int,double> test_3(2.12,3.12);//2.12会被强转为int
   test_3.show();

}

结果:

first: 3
second:5
first: 1
second:3.23
first: 2
second:3.12

我们所使用的vector<int> test,其实就是使用了类模板的方式去实现的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值