zoukankan      html  css  js  c++  java
  • 类模板的概念和意义

    类模板的概念和意义
    类模板
    一些类主要用于存储和组织数据元素
    类中数据组织的方式和数据元素的具体类型无关
    如:数组类,链表类,stack类,Queue类等
    C++中将模板的思想应用于类,使得类的实现不关注数据元素的具体类型,而只关注类所需要实现的功能

    C++中的类模板
    -以相同的方式处理不同的类型
    -在类声明前使用template进行标识
    -<typename T>用于说明类中使用的泛指类型T
    template <typename T>
    class Operator
    {
    public:
      T op(T a, T b);
    };

    类模板的应用
    -只能显示指定具体类型,无法自动推导
    -使用具体类型<Type>定义对象
    Operator<int> op1;
    Operator<string> op2;
    int i = op1.op(1,2);
    string s = op2.op("D.T.", "Software");

    声明的泛指类型T可以出现在类模板的任意地方
    编译器对类模板的处理方式和函数模板相同
    -从类模板通过具体类型产生不同的类
    -在声明的地方对类模板代码本身进行编译
    -在使用的地方对参数替换后的代码进行编译

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    
    template<typename T>
    class Operator
    {
    public:
        T add(T a, T b)
        {
            return a + b;
        }
        T minus(T a, T b)
        {
            return a - b;
        }
        T multiply(T a, T b)
        {
            return a * b;
        }
        T divide(T a, T b)
        {
            return a / b;
        }
    };
    
    int main()
    {
        Operator<int> op1;
        cout << op1.add(1,2) <<endl;
    
        Operator<string> op2;
        cout << op2.add("hello", " world") << endl;
        //cout << op2.minus("hello ", " world") << endl;//出错。因为两个string对象的相减,在C++中没有定义。
    
        return 0;
    }

    类模板的工程应用:注意这三部分不是C++规范的一部分,也不是C++编译器要求必须这样做。只不过工程上的一种好的习惯
    -类模板必须在头文件中定义
    -类模板不能分开实现在不同的文件中
    -类模板外部定义的成员函数需要加上模板<>声明

    #ifndef OPERATOR_H
    #define OPERATOR_H
    
    template<typename T>
    class Operator
    {
    public:
        T add(T a, T b);
        T minus(T a, T b);
        T multiply(T a, T b);
        T divide(T a, T b);
    
    };
    
    template<typename T>
    T Operator<T>:: add(T a, T b)
    {
        return a + b;
    }
    T Operator<T>:: minus(T a, T b)
    {
        return a - b;
    }
    T Operator<T>:: multiply(T a, T b)
    {
        return a * b;
    }
    T Operator<T>:: divide(T a, T b)
    {
        return a / b;
    }
    
    #endif // OPERATOR_H

    小结:
    泛型编程的思想可以应用于类
    类模板以相同的方式处理不同类型的数据
    类模板非常适用于编写数据结构相关的代码
    类模板在使用时只能显示指定类型

  • 相关阅读:
    Linux中的bin文件夹
    ubuntu安装deb包(dpkg)
    vim显示行号
    vim搜索结果高亮
    less和vim中使用正则表达式搜索
    正则表达式中的Quantifiers
    正则表达式解英语单词字谜
    [HDOJ4911]Inversion
    [LightOJ1282]Leading and Trailing
    [HDOJ1568]Fibonacci
  • 原文地址:https://www.cnblogs.com/-glb/p/11992557.html
Copyright © 2011-2022 走看看