赞
踩
当类模板碰到继承时,需要注意以下几点:
1)当子类继承到父类是一个类模板时,子类在声明时,需要指出父类中T的数据类型。
2)如果不指定,编译器无法给子类分配内存空间。
3)如果想灵活指定出父类中T的类型,子类也需要变成类模板。
-
- #include <iostream>
- using namespace std;
- #include <typeinfo>
-
- //类模板与继承
- /*
- template<class T>
- class Base{
- public:
- T m;
- };
- //1. 当子类继承到父类是一个类模板时,子类在声明时,需要指出父类中T的数据类型。
- //class Son:public Base //错误
- class Son:public Base<int>
- {
- public:
- };
- void test01()
- {
- Son s; //如果指定了T是int,那么s就是占用4个字节。
- }
- */
-
- //2. 如果想灵活指定出父类中T的类型,子类也需要变成类模板。
- template<class T>
- class Base{
- public:
- T m; //short m
- };
-
- template<class T1,class T2>
- class Son:public Base<T2>{
- public:
- Son()
- {
- cout << "T1的数据类型" << typeid(T1).name() << endl;
- cout << "T2的数据类型" << typeid(T2).name() << endl;
- }
-
- T1 obj; //int obj
- };
-
- void test02()
- {
- Son<int,short> s;
- }
-
- int main(int argc,char *argv[])
- {
-
- //test01();
- test02();
-
- return 0;
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。