Wednesday 6 February 2019

C++ Class Template

类模板

问题的提出:
对于这些数组:除了元素的类型不同之外,其他的完全相同
在调用类模板时, 指定参数, 由编译系统根据参数提供 的数据类型自动产生相应的模板类
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
类模板与继承:
  1. 类模板从类模板派生:
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