内容正文:
模 板
前面介绍过函数的重载,对重载函数而言,C++语言的检查机制能通过函数参数的不同及所属类型的不同正确地调用重载函数。例如,为求两个数的最大值,定义函数max()时,需要对不同的数据类型分别定义不同的重载版本。如果用户只定义了整型和浮点型的重载版本,而没有定义字符型的版本,则在主函数中调用此版本的重载函数时就会出现调用错误。为解决这样的问题,C++引入了模板。模板是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数,从而实现了真正的代码可重用性。模板分为两类:一类是函数模板,另一类是类模板。
目录
第12章
C++程序设计案例教程
12.1 函数模板
Add your text in here
Click to add Text
求两个数中较大数并返回
案例引入
定义一个函数模板,对两个整数、两个浮点数和两个字符进行比较,并返回最大值。
目录
第12章
C++程序设计案例教程
12.1 函数模板
源代码展示
#include "stdafx.h"
#include <iostream.h>
template<typename T>
T max(T x,T y) //定义函数模板,返回两个数最大值
{
return (x>y)? x:y ;
}
int main(int argc, char* argv[])
{
cout<<"max(3,4)="<<max(3,4)<<endl;
cout<<"max(3.9,4.1)="<<max(3.9,4.1)<<endl;
cout<<"max('a','A')="<<max('a','A')<<endl;
return 0;
}
目录
第12章
C++程序设计案例教程
12.1 函数模板
运行结果
程序分析
上述程序定义了返回两个数最大值的函数模板,在主函数中分别实例化为返回两个整数的最大值、两个浮点数的最大值和两个字符的最大值。
目录
第12章
C++程序设计案例教程
知识讲解
定义函数模板的语法格式如下:
template <class 或typename T>
返回类型 函数名(形参表)
{//函数定义体 }
目录
第12章
C++程序设计案例教程
12.2 类模板
Add your text in here
Click to add Text
使用类模板
案例引入
在头文件中定义类模板,并在源文件中使用这个类模板。
目录
第12章
C++程序设计案例教程
12.2 类模板
源代码展示
1)新建类模板
template<typename T1,typename T2>
class myClass{
private:
T1 I;
T2 J;
public:
myClass(T1 a, T2 b); //构造方法
void show();
};
//构造方法
template <typename T1,typename T2>
myClass<T1,T2>::myClass(T1 a,T2 b):I(a),J(b){}
//show方法
template <typename T1,typename T2>
void myClass<T1,T2>::show()
{
cout<<"I="<<I<<", J="<<J<<endl;
}
目录
第12章
C++程序设计案例教程
12.2 类模板
源代码展示
2)使用类模板
#include "stdafx.h"
#include <iostream.h>
#include "ClassTemplate.h"
int main(int argc, char* argv[])
{
myClass<int,int> class1(3,4);
class1.show();
myClass<int,char> class2(3,'a');
class2.show();
myClass<double,int> class3(2.5,4);
class3.show();
return 0;
}
目录
第12章
C++程序设计案例教程
12.2 类模板
运行结果
目录
第12章
C++程序设计案例教程
12.2 类模板
程序分析
该示例首先在头文件中定义了类模板,模板参数包括类型参数T1和T2。类模板名为myClass,包含两个私有数据成员,它们的类型分别为T1和T2;还声明了两个成员函数,分别是用于创建类实例的构造函数和用于输出