C++ 类模板(template)详解
·
目录
1.类模板的使用
1.1为什么需要类模板
类模板与函数模板的定义和使用类似,有时,有两个或多个类,其功能是相同的,仅仅是数据类型不同,我们可以通过如下面语句声明了一个类模板:
template <typename T>
class A
{
public:
A(T t){
this->t = t;
}
T& getT(){
return t;
}
public:
T t;
};
1.2类模板定义
类模板由模板说明和类说明构成
模板说明同函数模板,如下:
template <类型形式参数表>
类声明
例如:
template <typename Type>
class ClassName{
public:
//ClassName 的成员函数
private:
Type DataMember;
}
1.3单个类模板的使用
#include <iostream>
using namespace std;
template <typename T>
class A
{
public:
//函数的参数列表使用虚拟类型
A(T t = 0){
this->t = t;
}
//成员函数返回值使用虚拟类型
T& getT(){
return t;
}
private:
//成员变量使用虚拟类型
T t;
};
void printA(A<int>& a) {
cout << a.getT() << endl;
}
int main(void) {
//1.模板类定义类对象,必须显示指定类型
//2.模板种如果使用了构造函数,则遵守以前的类的构造函数的调用规则
A<int> a(666);
cout << a.getT() << endl;
//模板类做为函数参数
printA(a);
system("pause");
return 0;
}
运行截图:
2.继承中类模板的使用
2.1父类是一般类,子类是模板类
class A {
public:
A(int temp = 0) {
this->temp = temp;
}
~A(){}
private:
int temp;
};
template <typename T>
class B :public A{
public:
B(T t = 0) :A(666) {
this->t = t;
}
~B(){}
private:
T t;
};
父类一般类,子类是模板类, 和普通继承的玩法类似。
2.2子类是一般类,父类是模板类
template <typename T>
class A {
public:
A(T t = 0) {
this->t = t;
}
~A(){}
private:
T t;
};
class B:public A<int> {
public:
//也可以不显示指定,直接A(666)
B(int temp = 0):A<int>(666) {
this->temp = temp;
}
~B() {}
private:
int temp;
};
子类是一般类,父类是模板类,继承时必须在子类里实例化父类的类型参数。
2.3父类和子类都是模板类
父类和子类都时模板类时,子类的虚拟的类型可以传递到父类中。
结论:
子类从模板类继承的时候,需要让编译器知道 父类的数据类型具体是什么
1.父类一般类,子类是模板类, 和普通继承的玩法类似
2.子类是一般类,父类是模板类,继承时必须在子类里实例化父类的类型参数
3.父类和子类都时模板类时,子类的虚拟的类型可以传递到父类中
更多推荐
已为社区贡献5条内容
所有评论(0)