当前位置:   article > 正文

C++ 类模板(template)详解_c++模板类

c++模板类

目录

1.类模板的使用

1.1为什么需要类模板

1.2类模板定义

1.3单个类模板的使用

2.继承中类模板的使用

 2.1父类是一般类,子类是模板类

2.2子类是一般类,父类是模板类

2.3父类和子类都是模板类


1.类模板的使用

1.1为什么需要类模板

类模板与函数模板的定义和使用类似,有时,有两个或多个类,其功能是相同的,仅仅是数据类型不同,我们可以通过如下面语句声明了一个类模板:

  1. template <typename T>
  2. class A
  3. {
  4. public:
  5. A(T t){
  6. this->t = t;
  7. }
  8. T& getT(){
  9. return t;
  10. }
  11. public:
  12. T t;
  13. };

1.2类模板定义

类模板由模板说明和类说明构成

   模板说明同函数模板,如下:

         template    <类型形式参数表>

         类声明

例如:

  1. template <typename Type>
  2. class ClassName{
  3. public:
  4. //ClassName 的成员函数
  5. private:
  6. Type DataMember;
  7. }

1.3单个类模板的使用

  1. #include <iostream>
  2. using namespace std;
  3. template <typename T>
  4. class A
  5. {
  6. public:
  7. //函数的参数列表使用虚拟类型
  8. A(T t = 0){
  9. this->t = t;
  10. }
  11. //成员函数返回值使用虚拟类型
  12. T& getT(){
  13. return t;
  14. }
  15. private:
  16. //成员变量使用虚拟类型
  17. T t;
  18. };
  19. void printA(A<int>& a) {
  20. cout << a.getT() << endl;
  21. }
  22. int main(void) {
  23. //1.模板类定义类对象,必须显示指定类型
  24. //2.模板种如果使用了构造函数,则遵守以前的类的构造函数的调用规则
  25. A<int> a(666);
  26. cout << a.getT() << endl;
  27. //模板类做为函数参数
  28. printA(a);
  29. system("pause");
  30. return 0;
  31. }

运行截图:

2.继承中类模板的使用

 2.1父类是一般类,子类是模板类

  1. class A {
  2. public:
  3. A(int temp = 0) {
  4. this->temp = temp;
  5. }
  6. ~A(){}
  7. private:
  8. int temp;
  9. };
  10. template <typename T>
  11. class B :public A{
  12. public:
  13. B(T t = 0) :A(666) {
  14. this->t = t;
  15. }
  16. ~B(){}
  17. private:
  18. T t;
  19. };

 父类一般类,子类是模板类, 和普通继承的玩法类似。

2.2子类是一般类,父类是模板类

  1. template <typename T>
  2. class A {
  3. public:
  4. A(T t = 0) {
  5. this->t = t;
  6. }
  7. ~A(){}
  8. private:
  9. T t;
  10. };
  11. class B:public A<int> {
  12. public:
  13. //也可以不显示指定,直接A(666)
  14. B(int temp = 0):A<int>(666) {
  15. this->temp = temp;
  16. }
  17. ~B() {}
  18. private:
  19. int temp;
  20. };

 子类是一般类,父类是模板类,继承时必须在子类里实例化父类的类型参数。

2.3父类和子类都是模板类

 父类和子类都时模板类时,子类的虚拟的类型可以传递到父类中。

结论:

子类从模板类继承的时候,需要让编译器知道 父类的数据类型具体是什么

1.父类一般类,子类是模板类, 和普通继承的玩法类似

2.子类是一般类,父类是模板类,继承时必须在子类里实例化父类的类型参数

3.父类和子类都时模板类时,子类的虚拟的类型可以传递到父类中

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/576756
推荐阅读
相关标签
  

闽ICP备14008679号