

注意:类模板的创建对象一定要显示调用(指明类型)

完整示例代码:
#include using namespace std;template
class Test
{
private:T a;U b;
public:Test(T a, U b){this->a = a;this->b = b;}void show(){cout << a << " " << b << endl;}
};int main()
{Test t(1, 'a'); //类模板创建对象一定要显式调用t.show();return 0;
}
运行结果:

父类:

模板类派生普通类 继承的同时对基类实例化

模板类派生模板类 继承的同时不需要对Parent实例化,但是要声明虚拟类型

完整示例代码:
#include using namespace std;template
class Parent
{
protected:T a;
public:Parent(T a){this->a = a;}void show(){cout << a << endl;}
};class Child : public Parent //模板类派生普通类 继承的同时对基类实例化
{
public:Child(int a) : Parent(a){}void show(){cout << a << endl;}
};template
class Child2 : public Parent //模板类派生模板类 继承的同时不需要对Parent实例化
{
private:U b;
public:Child2(T a, U b) : Parent(a){this->b = b;}void show(){cout << this->a << " " << b << endl;}
};int main()
{Child c1(1);c1.show();Child2 c2(1, 1.11);c2.show();return 0;
}
运行结果:

这种方式最为省事,简单
类内只做了函数声明:

具体的实现实在类的外部:

完整示例代码:
#include using namespace std;template
class Test
{
private:T a;
public:Test(T a);void show();~Test();
};template
Test::Test(T a) //Test表示Test是模板类,不是普通类
{this->a = a;
}template
void Test::show()
{cout << a << endl;
}template
Test::~Test()
{}int main()
{Test t(1);t.show();return 0;
}
运行结果:

这里实现了一个数组的模板类:
array.h

arrary.hpp文件(注意:这里是.hpp文件)

main.cpp文件

注意:静态成员变量要在类的外部进行初始化

完整示例代码:
#include using namespace std;template
class Test
{
private:T a;
public:static int count;
public:Test(T a){this->a = a;count++;}
};template
int Test::count = 0; // 在类的外部进行初始化int main()
{Test t1(1);Test t2(1);Test t3(1);Test t4(1);Test t5(1);Test t6('a');Test t7('a');Test t8('a');cout << Test::count << endl; // 5cout << Test::count << endl; // 3return 0;
}

下一篇:Spring事务及传播机制