t;& m)
{
m.printMaker();
}
//2.参数模版化(常用)
template<class T1, class T2>
void func2(Maker<T1, T2>& m)
{
m.printMaker();
}
//3.整个类 模版化
template<class T>
void func3(T& m)
{
m.printMaker();
}
类模板的继承
点击查看代码
//1、普通类继承类模板
template<class T>
class Father
{
public:
Father()
{
m = 20;
}
public:
T m;
};
//普通类 继承 类模板
class Son : public Father<int> //2、要告诉编译器父类的泛型数据类型具体是什么类型
{
public:
};
//2、类模板 继承 类模板
//类模板 继承 类模板
template<class T1,class T2>
class Son2 :public Father<T2> //要告诉编译器父类的泛型数据类型具体是什么类型
{
};
类模板的成员函数的类内实现
点击查看代码
template<class NameType,class AgeType>
class Maker
{
public:
Maker(NameType name, AgeType age)
{
this->name = name;
this->age = age;
}
void printMaker()
{
cout << "Name:" << this->name << " " << "Age:" << this->age << endl;
}
public:
NameType name;
AgeType age;
};
类模板的成员函数类外实现
点击查看代码
template<class NameType,class AgeType>
class Maker
{
public:
Maker(NameType name, AgeType age);
void printMaker();
public:
NameType name;
AgeType age;
};
//类模板的成员函数类外实现
//成员函数必须写成函数模板,并且写上参数列表
template<class NameType,class AgeType>
Maker<NameType,AgeType>::Maker(NameType name, AgeType age)
{
cout << "构造函数" << endl;
this->name = name;
this->age = age;
}
template<class NameType,class AgeType>
void Maker<NameType, AgeType>::printMaker()
{
cout << "Name:" << this->name << " " << "Age:" << this->age << endl;
}
类模板的友元实现
类内实现
点击查看代码
template<class NameType,class AgeType>
class Maker
{
friend void printMaker(Maker<NameType, AgeType>& p)
{
cout << "类内实现" <<" "<< p.name << " " << p.age << endl;
}
public:
Maker(NameType name, AgeType age)
{
this->name = name;
this->age = age;
}
private:
NameType name;
AgeType age;
};
类外实现
点击查看代码
//1、声明模板
template<class NameType,class AgeType>
class Maker2;
//2、声明函数模板
//告诉编译器下面有printMaker2的实现
template<class NameType,class AgeType>
void printMaker2(Maker2<NameType, AgeType>& p);
template<class NameType, class AgeType>
class Maker2
{
//3、在函数名和()之间加上<>
friend void printMaker2<>(Maker2<NameType, AgeType>& p);
//编译器不知道printMaker2下面有没有实现,需要知道函数的结构
public:
Maker2(NameType name, AgeType age)
{
this->name = name;
this->age = age;
}
private:
NameType name;
AgeType age;
};
//友元在类外实现要写成函数模板
template<class NameType,class AgeType>
void printMaker2(Maker2<NameType, AgeType>& p)
{
cout << "类外实现的友元函数" << " "<<p.name << " " << p.age << endl;
}
类模板实现数组
MyArray.hpp
点击查看代码
#pragma once
template<class T>
class MyArray
{
public:
MyArray(int capacity)
{
this->mCapacity = capacity;
this->mSize = 0;
//T如果是Maker,这里要调用什么构造函数,要调用无参构造
p = new T[this->mCapacity];
}
//拷贝构造
MyArray(const MyArray &arr)
{
this->mCapacity = arr.mCapacity;
thi