zoukankan      html  css  js  c++  java
  • c++第十六章-(函数模板与类模板)

    函数模板的作用:解决需要重载多种不同类型参数的函数的问题,但又不想重载的时候。

    好处,泛型编程,解决了多处重载的问题。

    函数模板Demo:

    //声明函数模板类型T,T代表泛型,类似于OC中的id。函数模板的声明要实现放在一齐,分开的话会报错。class换成typename也是同一个意思。
    template <class T>
    void swap(T &a,T&b)
    {
        T temp = a;
        a = b;
        b = temp;
    }
    
    
    int main(int argc, const char * argv[])
    {
        int i1 = 100;
        int i2 = 200;
        std::cout << "交换前,i1 = " << i1
        << "   i2 = "<< i2 <<  std::endl;
        swap<int>(i1,i2);//调用方式一
        std::cout << "交换前,i1 = " << i1
        << "   i2 = "<< i2 << std::endl;
        
        
        
        std::string s1 = "小甲鱼";
        std::string s2 = "小鱿鱼";
        std::cout << "交换前,s1 = " << s1 << ",i2 = " << s2 << std::endl;
        swap(s1, s2);//调用方式二
        std::cout << "交换前,s1 = " << s1 << ",i2 = " << s2 << std::endl;
        return 0;
    }

    控制台打印结果:

    交换前,i1 = 100   i2 = 200
    交换前,i1 = 200   i2 = 100
    交换前,s1 = 小甲鱼,i2 = 小鱿鱼
    交换前,s1 = 小鱿鱼,i2 = 小甲鱼

    类模板Demo,实现栈式结构,first in last out,只有1个口。

    template <class T>
    class Stack
    {
        
    public:
        Stack(unsigned int size = 100);
        ~Stack();
        void push(T value);
        T pop();
        
    private:
        unsigned int size;//数组容器data的大小
        unsigned int sp;//栈的当前位置
        T *data;//存储入栈的数组
    };
    
    
    template <class T>
    Stack<T>::Stack(unsigned int size)
    {
        this -> size = size;
        data = new T[size];//初始化一个泛型数组
        sp = 0;
    }
    
    template<class T>
    Stack<T>::~Stack<T>()
    {
        delete []data;
    }
    
    template<class T>
    void Stack<T>::push(T value)
    {
        data[sp++] = value;
    }
    
    template<class T>
    T Stack<T>::pop()
    {
        return data[--sp];
    }
    
    int main()
    {
        Stack<int> intStack(100);
        
        intStack.push(1);
        intStack.push(2);
        intStack.push(3);
        
        std::cout << intStack.pop() << "
    ";
        std::cout << intStack.pop() << "
    ";
        std::cout << intStack.pop() << "
    ";
    }

    控制台输出结果:

    3
    2
    1
  • 相关阅读:
    使用SQL语句创建SQL数据脚本(应对万网主机部分不支持导出备份数据)
    js和jquery页面初始化加载函数的方法及先后顺序
    熔断器原理
    List<T>线性查找和二分查找BinarySearch效率分析
    ASP.NET资源大全-知识分享 【转载】
    C#语法——委托,架构的血液
    SUPERSOCKET 客户端
    VS 中的几种注释方法
    计算机专业术语中英文对照
    2018服务端架构师技术图谱
  • 原文地址:https://www.cnblogs.com/huen/p/3849001.html
Copyright © 2011-2022 走看看