zoukankan      html  css  js  c++  java
  • C++ 模板类demo

    #include <iostream>
    using namespace std;
    
    template <typename T>
    class MyVector
    {
    
        friend ostream & operator<< <T>(ostream &out,  const MyVector &obj);
    public:
        MyVector(int size = 0);  //构造函数
        MyVector(const MyVector &obj); // 拷贝构造函数
        ~MyVector(); //析构函数
    
    public:
    
        T& operator[] (int index);//返回引用
        // a3 = a2 = a1;
        MyVector &operator=(const MyVector &obj);
    
        
    
    public:
        int getLen()
        {
            return m_len;
        }
    
    protected:
        T *m_space;
        int m_len;
    };
    #include <iostream>
    using namespace std;
    #include "MyVector.h"
    
    template <typename T>
    ostream & operator<<(ostream &out,  const MyVector<T> &obj)
    {
        for (int i=0; i<obj.m_len; i++)
        {
            out << obj.m_space[i] << " ";
            //out << t1;
        }
        out << endl;
        return out;
    }
    
    
    //MyVector<int> myv1(10);
    template <typename T>
    MyVector<T>::MyVector(int size)  //构造函数
    {
        m_space = new T[size];
        m_len = size;
    }
    
    
    //MyVector<int> myv2  = myv1;
    template <typename T>
    MyVector<T>::MyVector(const MyVector &obj) // 拷贝构造函数
    {
        //根据myv1的大小分配内存
        m_len = obj.m_len;
        m_space = new T[m_len];
    
        //copy数据
        for (int i=0; i<m_len; i++)
        {
            m_space[i] = obj.m_space[i];
        }
    
    }
    
    template <typename T>
    MyVector<T>::~MyVector() //析构函数
    {
        if (m_space != NULL)
        {
            delete [] m_space;
            m_space = NULL;
            m_len = 0;
        }
    }
    
    template <typename T>
    T& MyVector<T>::operator[] (int index)
    {
        return m_space[index];
    }
    
    
    // a3 = a2 = a1;
    template <typename T>
    MyVector<T> &  MyVector<T>::operator=(const MyVector<T> &obj)
    {
        //先把a2的旧的内存释放掉
    
        if (m_space != NULL)
        {
            delete[] m_space;
            m_space = NULL;
            m_len = 0;
        }
    
        //根据a1分配内存 
        m_len = obj.m_len;
        m_space = new T[m_len];
    
        //copy数据
        for (int i=0; i<m_len; i++)
        {
            m_space[i] = obj[i];
        }
        return *this;  // a2 = a1; 返回给a2 的自身
    }
    #define _CRT_SECURE_NO_WARNINGS
    #include <iostream>
    using namespace std;
    
    #include "MyVector.cpp"
    
    //1  优化Teacher类, 属性变成 char *panme, 购置函数里面 分配内存
    //2  优化Teacher类,析构函数 释放panme指向的内存空间
    //3  优化Teacher类,避免浅拷贝 重载= 重写拷贝构造函数 
    //4  优化Teacher类,在Teacher增加 << 
    //5  在模板数组类中,存int char Teacher Teacher*(指针类型)
    
    //=====>stl 容器的概念 
    
    
    class Teacher
    {
    public:
        Teacher()
        {
            age = 33;
            strcpy(name, "");
        }
    
        Teacher(char *name, int age)
        {
            this->age = age;
            strcpy(this->name, name);
        }
        void printT()
        {
            cout << name << ", " << age << endl;
        }
    private:
        int age;
        //char name[32];
        char *pName2;
    };
    
    
    void main()
    {
        Teacher t1("t1", 31), t2("t2", 32), t3("t3", 33), t4("t4", 34);
    
        MyVector<Teacher> tArray(4);
    
        tArray[0] = t1;
        tArray[1] = t2;
        tArray[2] = t3;
        tArray[3] = t4;
    
        for (int i=0; i<4; i++)
        {
            Teacher tmp = tArray[i];
            tmp.printT();
        }
        cout << tArray;
    
    
    
        system("pause");
    }
    void main02()
    {
        MyVector<char> myv1(10);
        myv1[0] = 'a';
        myv1[1] = 'b';
        myv1[2] = 'c';
        myv1[3] = 'd';
    
        cout << myv1;
    
        system("pause");
    }
    
    void main01()
    {
        MyVector<int> myv1(10);
    
        for (int i=0; i<myv1.getLen(); i++)
        {
            myv1[i] = i+1;
            cout << myv1[i] << " ";
        }
        cout << endl;
    
    
        MyVector<int> myv2  = myv1;
        for (int i=0; i<myv2.getLen(); i++)
        {
            cout << myv2[i] << " ";
        }
    
        cout << myv2 << endl;
        
        cout<<"hello..."<<endl;
        system("pause");
        return ;
    }
  • 相关阅读:
    Longest Palindromic Substring
    PayPal MLSE job description
    Continuous Median
    Remove Duplicates From Linked List
    Valid IP Address
    Longest substring without duplication
    Largest range
    Subarray sort
    Multi String Search
    Suffix Trie Construction
  • 原文地址:https://www.cnblogs.com/yaowen/p/4777310.html
Copyright © 2011-2022 走看看