目录
前言
类模板
模板类继承
前言
随着c++发展,有一部分代码就会出现这样的情况:实现的内容相同,但是参数不同。模板类就是为解决这类情况来的,是一种泛型编码。即与数据类型无关的通用程序设计技术。
模板类本身不占空间,当编译器执行到模板类参数调用时,在赋予其具体的数据类型并且调用后才会占用空间。
类模板
为什么要使用类模板:
类模板和函数目模板的定义类似,有时两个或多个类的内容相同但是只是数据类型不同,为了方便我们可以套用类模板。
类模板与函数模板的区别
1、类模板一般情况下无法进行自动类型推导的调用
2、类模板在模板参数列表可以有默认参数:
比如:template<class T = int> //这里的int就是默认的参数类型
3、类模板在有默认参数类型时,可以发生隐式类型转化
类模板定义:由模板说明和类说明构成
template<类型形式参数表>
例如:
template<typename T> //格式,typename也可以用class代替
class A{
public:
A(T t=0){
this->t = t;
}
T& getT(){
return t;
}
private:
T t;
};
模板类继承
·父类时一般类,子类是模板类
和普通继承相似
class A{ //父类,一般类
public:
A(int a = 0){
this->a = a;
}
~A(){}
private:
int a;
};
template<typename T>
class B :public A{
public:
B(T t = 0) :A(6){
this->t = t;
}
~B(){}
private:
T t;
};
·子类为一般类,父类为模板类
继承时必须在子类里实例化父类的类型参数
template<typename T>
class A{ //父类为模板类
public:
A(T t = 0){
this->t = t;
}
~A(){}
private:
T t;
};
class B:public A<int>{ //子类,一般类
public:
B(int b = 0){
this->b = b;
}
~B(){}
private:
int b;
};
·子类和父类都是模板类
在这种情况下,子类的虚拟的类型可以传递到父类中。