C++(模板,智能指针)
一、模板
前言
模板使C++中的一种泛型编程语法,允许用户在编写函数或者编写类的的时候使用,使用户编写的数据类型不固定,会在入参时,根据数据类型自动改变。
1、函数模板
就是编写函数时使用的模板,可以用 T 代替函数形参列表的任意数据类型,使数据类型不定。
1)函数模板的语法
template <typename T1,typename T2,....,typename Tn> // 想要有几个不一样的不确定的数据类型,就写几个
函数返回值 函数名(由T代替数据类型的形参列表){函数定义
}注意:函数模板中,T 只能是一种类型,没有提升匹配,不会通过数据类型的兼容性 或 隐式转换,转换成其他匹配的类型
2)函数模板的使用
当调用 func() 函数的时候,T 会更具入参,自动变化
当实参与形参不完全匹配时会报错,不会进行提升匹配
(这个问题很好解决,这里只是展示不能提升匹配)
3)关于函数模板的潜规则
由于 T 可以代替所有数据类型,自然包括多级指针,多级地址,如果都由 T 来代替,会无法区分
因此 T 不允许表示任意类型的指针,指针标识符必须写在 T 外面,如:T*、T**、T*** ······
4)函数模板全特化的语法
template <typename T1,typename T2,....,typename Tn>
函数返回值 函数名(由T代替数据类型的形参列表){函数定义
}
//在以上函数模板的基础上,进行以下特化
template <>
返回值类型 函数名<特化类型1,特化类型2,...,特化类型n>(特化类型行参列表){函数定义
}
5)函数模板全特化的使用
当我们由特殊需求,一个函数模板里的逻辑代码不能满足时,可以专门为这个特殊的属性类型写一个全特化的函数模板
函数模板练习:
1:请使用函数模板,写一个能够针对所有数据类型的数据的快速排序函数,并多写几个数组做测试
2、类模板
在自定义类的时候使用的模板,可以用 T 代替类中定义的任意数据类型,使数据类型不定。
1)类模板的语法
2)如何创建类模板的对象
3)类模板成员方法定义在外部
4)使用类模板内部的数据类型
5)类模板全特化
6)类模板偏特化
7)类模板的继承
二、智能指针
自动管理堆空间,当没有指针指向该堆空间了,就说明该释放了
1)