zoukankan      html  css  js  c++  java
  • C++ 模板(template) 的定义

    定义:

    模板(template)是实现代码重用机制的一种工具,它可以实现类型参数化,把类型定义为参数(模板元编程),从而实现了真正的代码可重用性。

    模板是用来批量生成功能和形式都几乎相同的代码的。编译器就能在需要的时候,根据模板自动生成程序的代码。从同一个模板自动生成的代码,形式几乎是一样的。 模板就像一个做饼干的模具,至于饼干是什么味道,则要看具体实例化时制作饼干的材料。

    模板可以分为两类,一个是函数模板,另外一个是类模板。

    先举个函数模板的栗子:

      写一个求和函数:

    template<typename T>
    int sum(T a, T b) {
        return a>b;
    }
    //也可写成template<class T> T是模板类型的名称,可以apple可以是ABC <class apple>
    sum(15,16); // 这种不申明类型的写法也是允许的
    sum<int>(1, 2); 
    sum<float>(1.0, 2.0);
    sum<long long >(1,2);

    再举个类模板的例子:

    写一个stack

    template <class T> class Stack {
        public:
            Stack();
            ~Stack();
            void push(T t);
            T pop();
            bool isEmpty();
        private:
            T *m_pT;        
            int m_maxSize;
            int m_size;
    };
    template <class  T>  
    Stack<T>::Stack(){
       m_maxSize = 100;      
       m_size = 0;
       m_pT = new T[m_maxSize];
    }
    template <class T>  
    Stack<T>::~Stack() {
       delete [] m_pT ;
    }
            
    template <class T> 
    void Stack<T>::push(T t) {
        m_size++;
        m_pT[m_size - 1] = t;
        
    }
    template <class T> 
    T Stack<T>::pop() {
        T t = m_pT[m_size - 1];
        m_size--;
        return t;
    }
    template <class T> 
    bool Stack<T>::isEmpty() {
        return m_size == 0;
    }
  • 相关阅读:
    两个问题解答、opencv、tensorflow、numpy、matplotlib的基本使用
    图像处理之几何变换
    anaconda一站式环境的搭建(anaconda、tensorflow、opencv)
    python基础--自定义模块、import、from......import......
    python基础--闭包、装饰器
    python基础--迭代器、生成器
    python基础--函数全解析(2)
    CSS弹性布局
    CSS定位布局
    仿写博客园主页
  • 原文地址:https://www.cnblogs.com/lunatic-talent/p/12798619.html
Copyright © 2011-2022 走看看