类模板
问题的提出:
对于这些数组:除了元素的类型不同之外,其他的完全相同
在调用类模板时, 指定参数, 由编译系统根据参数提供 的数据类型自动产生相应的模板类
template<class T1,class T2> class Pair { public: T1 key; T2 value; Pair(T1 k, T2 v) :key(k), value(v) {}; bool operator<(const Pair<T1, T2>&p)const; }; template<class T1,class T2> bool Pair<T1, T2>::operator<(const Pair<T1, T2>&p)const { return key < p.key; } int main() { Pair<string, int>student("Tom", 19); cout << student.key << " " << student.value; return 0; }
同一个类模板的两个模板类是不兼容的
Pair * p; Pair a; p = & a; //wrong
类模板与继承:
- 类模板从类模板派生:
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; }
2. 类模板从模板类派生:
template<class T1,class T2> class A { T1 v1; T2 v2; }; template<class T> class B :public A<int, double> { T v; }; int main() { B<char> obj1; return 0; }
自动生成两个模板类:A<int,double>和B<char>
3. 类模板从普通类派生
class A { int v1; }; template <class T> class B :public A { T v; }; int main() { B<char> obj1; return 0; }
4. 普通类从模板类派生:
template <class T> class A { T v1; int n; }; class B:public A<int> { double v; }; int main() { B obj1; return 0; }
No comments:
Post a Comment