作用: C++模板提供了一种通用模具,大大提高了代码的复用性,
实现方式:将类型参数化
模板分类:函数模板、类模板
语法:
(1)template关键字:表示要定义一个模板类型
(2)typename关键字或class关键字: 表示给类型一个泛型名称.
(3)<泛型名称>:放置在typename之后, 特指一种泛型类型,通常为大写.
template
(1)函数内部对象的类型在调用函数时才确定(类型动态化)
(2)在函数模板当中:
template
template
void fun1(T1 a)
{
}
2函数模板使用:
(1)自动类型推导:必须推导出一致的数据类型T,可以使用
template
void fun(T_ n1, T _n2)
{
Char ch='1';
intn=23;
fun(n,ch); //error
}
(2)显示指定类型,
fun
(3)注意:模板必须要确定出T的数据类型,才可以使用
1)普通函数能够进行隐式类型转换:
2)函数模板的自动类型推导,不能进行隐式转换
调用规则:
1.如果普通函数与函数模板都存在(一样),优先调用普通函数
2.可以通过空模板参数列表来强制性调用模板函数,fun<>(a,b);
3.函数模板可以发生重载
4.如果函数模板可以产生更好的匹配,优先调用函数模板.
普通函数需要类型转换时,函数模型只需要推导,则优先选择函数模板.
- #include
- using namespace std;
-
- int Myadd(int a,int b)
- {
- cout<<"普通函数"<
- return a+b;
- }
-
- template <class T>
- T Myadd(T a,T b)
- {
- cout<<"模板函数"<
- return a+b;
- }
-
- void test01()
- {
- int a=10;
- char b=20;
- Myadd(a,a); //调用普通函数不用推导
- Myadd<>(a,a);//调用模板函数
- Myadd<int>(a,a);//指定调用模板函数
- Myadd(a,b); //调用普通函数因为普通的函数可以自动类型转换
- //Myadd<>(a,b); //函数模板不会做自动类型转换
- }
-
-
- int main(int argc, char *argv[])
- {
- test01();
- return 0;
- }
二、类模板
●类模板表示将类中的成员属性模板化(泛型化
●语法:
template
{
class Person
public:
T1_ attri1 ;
T2_ attri2;
};
●注意:
类模板实例化对象时没有自动推导类型方式,所以必须显示类型
1 Person , int> p1;
●类模板中的泛型类型可以有默认参数,(函数模板也可以有,意义不大,因为有自动推导)
template , typename T2=int>
class Person
{
pub1ic:
T1_attri1;
T2_ attri2;
};
●类模板成员函数类外实现:
template ,typename T2=int>
class A
{
Public:
A();
};
template
typename T2>
A,T2>: :A()
{
}
注意:类外实现的成员函数,模板不能有默认参数.
●类模板对象作为函数参数:
1.指定传入类型(用的比较多)
void fun(Data, int> &d)
{
}
2.参数模板化
template ,typename T2:
void fun(Data, T2> &d)
{
}
template
void fun(T &d)
}
●类模板与继承:
。当子类继承的父类是一个类模板时,子类在声明的时候,要指定父类中的类型
。如果要灵活指定父类中的T类型,子类也需要实现为类模板.
template
class Base
{
public:
T num;
};
class Son: pub1ic Base
public:
string name;
};
template,typename T2>
class Son1: public Base
{
pub1ic:
T2 id;
};
int main()
{
Son1,char>s1;
}
-
相关阅读:
C# 第五章『面向对象』◆第6节:类的继承
kube-scheduler 抢占机制
recycleView自定义ItemDecoration解决列表第一个item和最后一个item的间距难统一问题
HTML爱心照片墙源码
git使用
全面指南:如何发布自己的npm插件包
DRF-认证权限频率
华为HCIP认证用处大吗?
Docker的安装配置与使用
07|声学回声消除AEC(1)
-
原文地址:https://blog.csdn.net/qq_63626307/article/details/126823470