类模板
示例:
template<class nameType,class ageType>//class==typename
class Person{
public:
Preson(nameType name,ageType age){//构造函数
this->name=name;
this->age=age;
}
nameType name;
ageType age;
}
void test01(){
Preson<String,int>p1("YUANZIFAN",20);
}
注意:类模板中的成员函数并不是一开始就创建的,是在调用时才去创建
●类模板对象可做函数的参数
三种方式:
1.指定传入类型(最长用)
fun01(Person<string ,int>&p)
2.参数模板化
template<class T1,class T2>
fun01(Person<T1,T2>&p)
3.整个类模板化
template< class T>
fun01(T &p)
●类模板与继承
1.当子类继承的父类是一个类模板时,子类在声明的时候,要指定在父类中T的类型,如果不指定,编译器无法给子类分配内存,如果想灵活指定出父类中T的类型,子类也需要变为类模板。
注:必须要知道父类中T的类型,才能继承给子类。
template<class T>
class Person{
T m;
};
//指定父类模板T为int型
class son1:public person<int>{
};
//灵活指定父类T类型,子类也需要变为类模板
template<class T1,class T2>
class son:public person<T1>{
T2 obj;
};
●类模板成员函数类外实现
实例:
//1.构造函数类外实现
template<class nametype ,class ageType>
Person<nameType,ageType>::Person<nameType name,ageType age>
//2.成员函数
template<class nametype ,class ageType>
void Person<nameType,ageType>::show(){
//niyaoshixiandedongxi
}
2021 ↩︎