01 类模板从类模板派生
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5CMxADM0EjNihjM0IDZiZTYyYzX0ITOyITMzEzLcZDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
上图的代码例子如下:
// 基类 - 类模板
template <class T1,class T2>
class A
{
T1 v1; T2 v2;
};
// 派生类 - 类模板
template <class T1,class T2>
class B:public A<T2,T1>
{
T1 v3; T2 v4;
};
// 派生类 - 类模板
template <class T>
class C:public B<T,T>
{
T v5;
};
int main()
{
B<int,double> obj1;
C<int> obj2;
return 0;
}
02 类模板从模板类派生
上图的代码例子如下:
template <class T1,class T2>
class A
{
T1 v1; T2 v2;
};
template <class T>
class B:public A<int,double> // A<int,double> 模板类
{
T v;
};
int main()
{
//自动生成两个模板类 :A<int,double> 和 B<char>
B<char> obj1;
return 0;
}
// 基类 - 普通类
class A
{
int v1;
};
// 派生类 - 类模板
template <class T>
class B:public A // 所有从B实例化得到的类 ,都以A为基类
{
T v;
};
int main()
{
B<char> obj1;
return 0;
}
template <class T>
class A
{
T v1;
};
class B:public A<int>
{
double v;
};
int main()
{
B obj1;
return 0;
}