c++模板概述

编程类型:

一、面向过程:接近事实,代码量大,维护难,强聚合

二、面向对象:(多态)接口简单,代码结构清晰,但设计难度大

三、模板编程(泛型编程):特点:(减少代码量)生成代码的代码

 通过函数模板写的模板函数,在实例化(编译,运行前)时自动推导生成代码所以模板参数不能是指针、对象(因为二者是运行时确定的)


多态

 动态多态静态多态(泛型)
代码生成期间运行期间编译期间
特点面向对象(例:纯虚数)有统一接口,运行速度快,非强制执行。但更难调试。


模板编程

注意:

  1、不能像编写普通类一样分成两个文件,.cpp文件包含.h(头)文件。这样会出错,因为定义的时候.h文件换为相应的数据类型(例<int>),但是.cpp文件还是(例<T>)。所以不用分开,全部写在头文件(写在头文件里的函数默认是inline函数)

     特殊方法:尾分离(.cpp可改为.pcc

[cpp]  view plain  copy
  1. template<typename T>  
  2. const T Max(T lhs,T rhs);  
  3.   
  4. #include"Demo.cpp"  

    2、模板参数可以传入推导类型的值,但必须是常量

  3、在模板类里面,不能直接使用成员变量,需做接口(例:GetValue();SetValue();)



类模板

[html]  view plain  copy
  1. template<class _Ty>  

模板类

[cpp]  view plain  copy
  1. template<class _Ty>  
  2. class Demo(){};  


成员模板:类(可以是非模板类)里面的模板

     若既有类模板又有成员模板,并且声明实现分开写时,类模板必须写在前面


模板函数

模板函数不是单纯地函数,它是用来生成函数的模板(不会凭空的生成)

模板参数列表里的参数必须在函数参数列表或中使用一次

           若指定返回值(如下)则函数可以运行(但没意义,不推荐)

template<typename T>
const T Max(int lhs,int rhs)
{
       return lhs>rhs?lhs:rhs;
}

int main()
{
       Max<double>(1,2);
       return 0;
}

模板类 

例:

template<typename T>
class Demo
{
...
};

  模板类的继承

        非模板类可继承模板类(需写出特化类型)

       例:(继承上类)class Other:public Demo<char>{};


模板函数的重载(不支持提升转换)

    条件:模板参数或函数参数不同;或同名的普通函数

//例:
//原型
template<typename T>
bool Max(T lhs,T rhs)
{
       return lhs>rhs?lhs:rhs;
}
//重载一
template<typename T1,typename T2>
const T1 Max(T2 lhs,T2 rhs)
{
       return lhs>rhs?lhs:rhs;
}
//重载二
template<typename T>
const T Max(T lhs,T rhs)
{
       return lhs>rhs?lhs:rhs;
}


模板的特化(属于函数模板,不是重载,可以提升转换

    模板函数:

         例:原型:同上      特化:template<>const char*Max(const char*lhs,const char*rhs){};

    模板类:

        全特化:相当于一个全新的类,模板类不会生成

      写法:类名<特化类型>

[cpp]  view plain  copy
  1.    //原型  
  2. template<typename T>  
  3. class Demo  
  4. {  
  5.    Demo();  
  6.    ~Demo():  
  7.        ...  
  8. };  
  9. //全特化  
  10. template<>  
  11.    class Demo<int>  
  12.    {...};  

   偏特化:特化具体方法,其余的会自动生成

                写法:类名<特化类型>::函数名(参数)

     //原型:同上    

[cpp]  view plain  copy
  1. template<>  
  2. Demo<int>::Demo()  
  3. {...}  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值