/*
模板数实现多态性的有效方法,C++的模板用来实现数据类型的参数化,采用模板方式定义函数或
类时,不用确定默写参数或成员的类型,而是将他们的类作为模板的参数,在使用模板是根据实参的类型来
确定模板参数的类型。
在程序中使用模板能简化编程过程提高代码的重用性。
C++的模板分为 函数模板(Function Template) 和 类模板(class Template)两种
*/
/*
函数模板:
函数模板是一种不指定某些擦拿书的数据类型的函数,在被勇士根据实际擦拿书的类型决定模板参数
的类型。
在程序中可以利用函数模板来定义一个通用函数,生成多个功能相识但参数和返回类型不同的函数。
函数模板的一般格式:
template<typename 标识符>
标识符 函数名(标识符 参数)
{
函数体
}
或
template<class 标识符>
标识符 函数名(标识符 参数)
{
函数体
}
其中
关键字template表示声明一个模板,关键字typename或class表示任意内部
类型或用户定义类型,标识符与变量标识符定义相同。
*/
//函数模板的应用
#include <iostream>
//定义第一个函数模板
template<class T>
T sum(T a,T b)
{
return a+b;
}
//第一第二个函数模板
template<class T1,class T2>
T1 sum(T1 a,T2 b, T1 c)
{
return a+b+c;
}
//主函数
int main(int argc, const char * argv[])
{
std::cout<<sum(6.8, 8.8)<<std::endl;//15.6
std::cout<<sum(10, 6)<<std::endl;//16
std::cout<<sum(5,'A', 10)<<std::endl;//80
//说明:当主函数调用sum()函数时,系统首先判断实参的类型,然后按照实参的类型进行两个数的求和运算
//注意:函数模板只能用于定义非成员函数
return 0;
}
/*
类模板是一种不能确定某些数据成员的类型或成员函数的参数及返回值类型的类,
在程序中使用类模板,可以生成多个功能相同但某些数据成员类型不同成员函数的参数及返回值
类型不同的类,
类模板的一般定义格式:
template<typename 标识符>
class 类模板名
{
//成员的定义
};
或
template<class 标识符>
class 类模板
{
//成员的定义
}
列如:
template<class T>
class A //声明类模板
{
public:
T sum(T a, T b);//类模板中的成员函数
private:
T x;
};
类模板的成员函数可在类中定义,也可在类外定义,
如果在类模板外部定义成员函数,其一般格式:
template<class 标识符>
函数类型 类模板名<标识符>::成员函数(标识符 参数)
{
函数体
}
使用类模板创建对象的格式如下:
类模板名<模板参数列表>对象名;
*/
#include<iostream>
template <class T1,class T2>
class myClss
{
private:
T1 x;
T2 y;
public:
myClss(T1 a, T2 b)//构造函数
{
x=a;
y=b;
}
void showMax();
};
template <class T1 ,class T2>
void myClss<T1,T2>::showMax()
{
std::cout<<(x>y?x:y)<<std::endl;
}
int main(int argc ,const char *argv[])
{
int a=5;
float b=9.5f;
myClss<int, float>An(a,b);//创建类模板的对象
myClss<int, char>Bn(a,'b');//创建类模板的对象
An.showMax();//9.5
Bn.showMax();//98
}