C++之模板(template)

  模板(template)是C++最为强大的 功能之一,它使得算法的实现无关于数据的类型,使模板能适用于任意一组相关的函数和类。模板的意义是实现数据类型的参数化,提高了代码的重用率。

eg:计算两个数的最大值。

#include<iostream>
using namespace std;
int myMax(int a,int b){
   return a>b?a:b;
}
char myMax(char a,char b){
   return a>b?a:b;
}
double myMax(double a,double b){
   return a>b?a:b;
}
int main(){
    cout<<myMax(5,6)<<endl;
    cout<<myMax('X','h')<<endl;
    cout<<myMax(5.5,6.7)<<endl;
    return 0;
}

输出结果:
这里写图片描述

 你会发现上面像老太太的缠脚布,真是又臭又长。下面我用模板去简化下上面的代码。

#include<iostream>
using namespace std;
template<typename T>
T myMax(T a,T b){
   return a>b?a:b;
}
int main(){
    cout<<myMax(5,6)<<endl;
    cout<<myMax('X','h')<<endl;
    cout<<myMax(5.5,6.7)<<endl;
    return 0;
}

输出结果:
这里写图片描述

  综上你会发现使用模板两个优点:
   1.减少重复代码 
   2.处理目前未知数据 

  实现模板的重要手段就是“数据类型参数化”。分为两个层次:数据的参数化;类型的参数化。所谓参数化就是将具体的数据或数据类型的形式化表示。
  其中template是模板的标识,尖括号部分<class T>是对数据类型形式参数T的说明,关键字class表明它是一个模板形式参数。

  模板分为类模板和函数模板,对于函数模板的定义的语法规则如下:
  (1)所有模板都必须以关键字template开始,关键字template告诉编译器下面的程序代码将会操作多种数据类型。
  (2)以尖括号<>括起来的部分为模板形参列表,在该类表中声明了一个或多个模板形参,若多个模板形参,它们之间用逗号隔开,并且所有的形参前面必须加关键字class或者typename。
  eg:
         template<typename T,typename Q>
         void do_anything(T t,Q q);
  (3)除了模板语法外,普通函数和模板函数的唯一区别就是有表示类型参数的T表示函数形参的类型。

  对于类和结构体也可以带模板。
  eg:
        template<typename T>
        class Poin{
             T x,y;
             point(T x=0,T y=0):x(x),y(y){}//表示把成员变量x,y初始化为参数x,y 
        };      

  结构体和类差异很小,主要区别在默认访问对象和继承方式不同。在工程中一般用struct定义纯数字,包含较少的成员函数;class定义复杂的行为。

  本文只是为了解模板函数和模板类,为能更好的理解(标准模板库)STL做铺垫。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值