• template相关


      template模板是c++中支持多态的工具,使用模板可以使用户为类或函数声明一种一般的模式,使得该模板试用于任意类型的参数。

      函数模板

      定义如下:

    template <typename T>
    void swap(T& a , T& b){
        T temp;
        temp = a;
        a = b;
        b = temp;        
    }

      使用如下:

    #include<stdio.h>
    int main(){
        int num1 = 0, num2 = 1;
        swap<int>(num1 , num2);
        printf("num1=%d,num2=%d
    ",num1,num2);
        return 0;  
    }

      类模版:

      如果有两个类,其功能是相同的,仅仅是因为其数据结构不同,就可以通过声明一个类模版,他可以有一个或者多个虚拟的类型参数;这样就能实现“一类多用”。由于类模板包含类型参数,因此又称为参数化的类。如果说类是对象的抽象,对象是类的实例,则类模板是类的抽象,类是类模板的实例。利用类模板可以建立含各种数据类型的类。

      与普通的类相比,类模版主要有下面两处不同:

      1、在声明类模版时要加上template<class T>;

      2、原有所有的类型名如int,都要换成虚拟类型参数名T;

      定义如下:

    template<class T>
    class Stack{
    public:
        Stack();
        ~Stack();
        void push(T t);
        T pop();
        bool isEmpty();
    private:
        int m_maxSize ;
        int m_size ;
        T *m_pT ;
    }
    
    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;
    }

      类模版使用:

    #inlcude<stdio.h>
    
    int main(){
        Stack<int> intStack;
        intStack.push(1);
        intStack.push(2);
        intStack.push(3);
        
        while (!intStack.isEmpty()) {
            printf("num:%d
    ", intStack.pop());
        }
        return 0;
    }    

      

      类模板的类型参数可以有一个或多个,每个类型前面都必须加class,如

    template <class T1,class T2>
    
    class someclass
    
    {…};

      模版参数:

      模板除了有类型参数,也可以有普通的参数,也可以有默认的模板参数,例如:

    template<class T, T def_val> 
    class Stack{...}

      如果想要对类模版的对象数量进行限制,可是使用int参数来配置这个累的最大对象数,如下:

    template <class T,int maxsize = 100> 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,int maxsize> Stack<T, maxsize>::Stack(){
       m_maxSize = maxsize;      
       m_size = 0;
       m_pT = new T[m_maxSize];
    }
    template <class T,int maxsize>  Stack<T, maxsize>::~Stack() {
       delete [] m_pT ;
    }
            
    template <class T,int maxsize> void Stack<T, maxsize>::push(T t) {
        m_size++;
        m_pT[m_size - 1] = t;
        
    }
    template <class T,int maxsize> T Stack<T, maxsize>::pop() {
        T t = m_pT[m_size - 1];
        m_size--;
        return t;
    }
    template <class T,int maxsize> bool Stack<T, maxsize>::isEmpty() {
        return m_size == 0;
    }

      使用如下:

    #include <stdio.h>
    int main() {
        int maxsize = 1024;
        Stack<int,1024> intStack;
        for (int i = 0; i < maxsize; i++) {
            intStack.push(i);
        }
        while (!intStack.isEmpty()) {
            printf("num:%d
    ", intStack.pop());
        }
        return 0;
    }
  • 相关阅读:
    编写JS代码的“use strict”严格模式及代码压缩知识
    开发网站要从用户的角度出发!
    你好,世界
    JavaScript的几种函数的结构形式
    JavaScript功能检测技术和函数构造
    android打造万能的适配器
    C语言第二次博客作业分支结构
    C语言第三次博客作业单层循环结构
    C语言第一次博客作业——输入输出格式
    C语言第四次博客作业嵌套循环
  • 原文地址:https://www.cnblogs.com/jhmu0613/p/6914635.html
Copyright © 2020-2023  润新知