一.类定义
#pragma once;
#include<string>
#include<iostream>
#include<iomanip> //for setw()
using namespace std;
//类模板 声明/定义
//T1是学生id的类型,而T2是成绩的类型
template <class T1, class T2>
class Student
{
public:
Student(T1 para1, T2 para2) :id(para1), score(para2){} //类模板通用版的构造函数
void showdatas();//打印学生信息
private:
T1 id; //学生id的形式可以有多种选择,如string型、long型、char*型
T2 score;//学生成绩类型也有多种,如char型、double型(下面)、甚至string
};
//类模板 声明/定义
//T1是学生id的类型,而double是成绩的类型
template <class T1>
class Student<T1,double >
{
public:
Student(T1 para1, double para2) :id(para1), score(para2){}
//类模板部分具体化的构造函数
void showdatas();//打印学生信息
private:
T1 id; //学生id的形式可以有多种选择,如string型、long型、char*型
double score;//学生成绩类型double型
};
二. 类方法实现
这里要注意的电不多,但容易忘记。
类模板方法的声明与实现很特殊,它们要放一个文件里不然会出错!!!我是第二次被这给坑了。你也可以通过一些操作“把它们分开”。
//类模板的通用方法
template<class T1, class T2>
void Student<T1, T2>::showdatas()
{
cout << "First of all,编译器实体化对象使用的类是“通用”模板\n";
cout << setw(7) << "id=" << id << endl;
cout << setw(7) << "score=" << score << "\n\n";
}
//类模板的部分具体化方法
template<class T1>
void Student<T1, double>::showdatas()
{
cout << "First of all,编译器实体化对象使用的类是“部分具体化”模板\n";
cout << fixed << right;
cout << setprecision(1);
cout << setw(7) << "id="<< id << endl;
cout << setw(7) << "score=" << score << "\n\n";
}
三. 使用及结果
最后再强调一点:类模板的声明与实现放同一文件!