• 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
  • 相关阅读:
    Navicat连接mysql出现10061/10060错误的解决
    对话守则
    一次Django admin bug解决的思维过程
    Think different
    SVN版本库的迁移
    Windows Phone 8 锁屏背景与通知
    Windows Phone 7 应用升级 Windows phone 8 方案预览 选择合适的 Key Feature
    从 windows phone7 到 windows phone 8 更新 如何设配两个版本
    windows phone 8 语音 Speech for Windows Phone 8
    windows phone 8 中的应用间通信
  • 原文地址:https://www.cnblogs.com/huen/p/3849001.html
Copyright © 2020-2023  润新知