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 ;
    }
  • 相关阅读:
    urlrewritingnet 域名http状态302 问题(转)
    ASP.NET设置404页面返回302HTTP状态码的解决方法
    互联网网站的反爬虫策略浅析
    常见的端口速查
    SQL语句的MINUS,INTERSECT和UNION ALL
    linux下不解包查看tar包文件内容
    SSH 公钥检查
    df: `/root/.gvfs': Permission denied
    Bash脚本实现批量作业并行化
    ssh远程执行远程执行命令
  • 原文地址:https://www.cnblogs.com/yaowen/p/4777310.html
Copyright © 2011-2022 走看看