C++复习--07

模板

语法:

template < typename T >
void mySwap ( T & a , T & b )
{
T temp = a ;
a = b ;
b = temp ;
}
//1 、自动类型推导
mySwap ( a , b );
//2 、显示指定类型
mySwap < int > ( a , b );
模板的注意事项:
// 1 、自动类型推导,必须推导出一致的数据类型 T, 才可以使用
void test01 ()
{
int a = 10 ;
int b = 20 ;
char c = 'c' ;
mySwap ( a , b ); // 正确,可以推导出一致的 T
//mySwap(a, c); // 错误,推导不出一致的 T 类型
}
// 2 、模板必须要确定出 T 的数据类型,才可以使用
template < class T >
void func ()
{
cout << "func 调用 " << endl ;
}
void test02 ()
{
//func(); // 错误,模板不能独立使用,必须确定出 T 的类型
func < int > (); // 利用显示指定类型的方式,给 T 一个类型,才可以使用该模板
}
普通函数与函数模板的区别:
普通函数调用时可以发生自动类型转换(隐式类型转换)char 》int
函数模板调用时,如果利用自动类型推导,不会发生隐式类型转换
如果利用显示指定类型的方式,可以发生隐式类型转换
普通函数与函数模板的调用规则
1. 如果函数模板和普通函数都可以实现,优先调用普通函数
2. 可以通过空模板参数列表来强制调用函数模板
//2 、可以通过空模板参数列表来强制调用函数模板
myPrint <> ( a , b ); // 调用函数模板
3. 函数模板也可以发生重载
4. 如果函数模板可以产生更好的匹配 , 优先调用函数模板
template<> bool myCompare(Person &p1, Person &p2)
{
if ( p1.m_Name == p2.m_Name && p1.m_Age == p2.m_Age)
{
return true;
}
else
{
return false;
}
}

类模板

template<class NameType, class AgeType>
Person(NameType name, AgeType age)
Person<string, int>P1("孙悟空", 999);

//必须显示指定数据类型

//类模板在模板参数列表中可以

有默认参数

-> 

template<class NameType, class AgeType = int>
Person <string> p("猪八戒", 999);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值