C++ 类模板(template)详解

C++ 类模板(template)详解

目录

1.类模板的使用

1.1为什么需要类模板

1.2类模板定义

1.3单个类模板的使用

2.继承中类模板的使用

2.1父类是一般类,子类是模板类

2.2子类是一般类,父类是模板类

2.3父类和子类都是模板类

1.类模板的使用

1.1为什么需要类模板

类模板与函数模板的定义和使用类似,有时,有两个或多个类,其功能是相同的,仅仅是数据类型不同,我们可以通过如下面语句声明了一个类模板:

template

class A

{

public:

A(T t){

this->t = t;

}

T& getT(){

return t;

}

public:

T t;

};

1.2类模板定义

类模板由模板说明和类说明构成

模板说明同函数模板,如下:

template <类型形式参数表>

类声明

例如:

template

class ClassName{

public:

//ClassName 的成员函数

private:

Type DataMember;

}

1.3单个类模板的使用

#include

using namespace std;

template

class A

{

public:

//函数的参数列表使用虚拟类型

A(T t = 0){

this->t = t;

}

//成员函数返回值使用虚拟类型

T& getT(){

return t;

}

private:

//成员变量使用虚拟类型

T t;

};

void printA(A& a) {

cout << a.getT() << endl;

}

int main(void) {

//1.模板类定义类对象,必须显示指定类型

//2.模板种如果使用了构造函数,则遵守以前的类的构造函数的调用规则

A 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

class B :public A{

public:

B(T t = 0) :A(666) {

this->t = t;

}

~B(){}

private:

T t;

};

父类一般类,子类是模板类, 和普通继承的玩法类似。

2.2子类是一般类,父类是模板类

template

class A {

public:

A(T t = 0) {

this->t = t;

}

~A(){}

private:

T t;

};

class B:public A {

public:

//也可以不显示指定,直接A(666)

B(int temp = 0):A(666) {

this->temp = temp;

}

~B() {}

private:

int temp;

};

子类是一般类,父类是模板类,继承时必须在子类里实例化父类的类型参数。

2.3父类和子类都是模板类

父类和子类都时模板类时,子类的虚拟的类型可以传递到父类中。

结论:

子类从模板类继承的时候,需要让编译器知道 父类的数据类型具体是什么

1.父类一般类,子类是模板类, 和普通继承的玩法类似

2.子类是一般类,父类是模板类,继承时必须在子类里实例化父类的类型参数

3.父类和子类都时模板类时,子类的虚拟的类型可以传递到父类中

相关推荐