• 模仿写的cstring类,操作符没有完全重载(=,)


    // String.cpp : 定义控制台应用程序的入口点。
    //

    #include 
    "stdafx.h"

    template
    <typename Ty>
    class CMyString
    {
    public:
     typedef unsigned size_t;
     typedef Ty valuetype;

     
    enum{
      MAX_LENGHT 
    = 1000
     }
    ;

    private:
     size_t m_uCout;
     Ty m_Buf[MAX_LENGHT];

    public:
     CMyString();
     
    ~CMyString();
     CMyString(
    const Ty* str);
     CMyString(
    const CMyString<Ty>& other);
     CMyString
    & operator =(const CMyString<Ty>& other); 
     CMyString
    & operator +=(const CMyString<Ty>& other); 

     CMyString 
    operator +(const CMyString<Ty>& other);

     CMyString
    & operator -=(const CMyString<Ty>& other);
     CMyString 
    operator -(const CMyString<Ty>& other);
    public:
     size_t size()
     
    {
      
    return m_uCout;
     }


     
    const Ty* c_str() const
     
    {
      
      
    return m_Buf;
     }

     
    private:
     size_t mylen(
    const Ty* str)
     
    {
      
    if(NULL == str)
       
    return 0;
      size_t size 
    = 0;
      
    while(*(str + size) != 0)
      
    {
       
    ++size;
      }

      
    return size;
     }


      
    void mycpy(Ty* des,size_t size,const Ty* res)
      
    {
      size_t tmp 
    = 0;
      
    while(tmp<= size && *(res + tmp) != 0)
      

       
    *(des + tmp) = * (res + tmp);
       tmp
    ++;
      }

      
    *(des + tmp) = 0;
      }



      
    void mycat(Ty* des,size_t size,const Ty* res)
      
    {
      size_t i 
    = 0;
      
    while(*(des + i) != 0)
      
    {
       i
    ++;
      }


      size_t j 
    = 0;
      
    while (*(res + j) != 0)
      
    {
       
    *(des + i + j) = *(res + j);
       j
    ++;
      }

      
    *(des + i + j) = 0;
      }


    }
    ;
    //默认构造函数
    template<typename Ty>
    CMyString
    <Ty>::CMyString()
    {
     
    *m_Buf = 0;
     m_uCout 
    = 0;
    }

    //析构函数
    template<typename Ty>
    CMyString
    <Ty>::~CMyString()
    {

    }


    //a("a")
    template<typename Ty>
    CMyString
    <Ty>::CMyString(const Ty* other)
    {
     
    if(other == NULL)
     
    {
      
    *m_Buf = 0;
      m_uCout 
    = 0;
     }

     
    else
     
    {
      m_uCout 
    = mylen(other);
      mycpy(m_Buf,m_uCout,other);
     }


    }


    //a(b)
    template<typename Ty>
    CMyString
    <Ty>::CMyString(const CMyString<Ty>& other):m_uCout(other.m_uCout)
    {
     mycpy(m_Buf,m_uCout,other.m_Buf);
    }


    //c=b
    template<typename Ty>
    CMyString
    <Ty>& CMyString<Ty>::operator = (const CMyString<Ty>& other)
     
    {
      m_uCout 
    = other.m_uCout;
      mycpy(m_Buf,m_uCout,other.m_Buf);
      
    return *this;
     }


    //c+=b
    template<typename Ty>
    CMyString
    <Ty>& CMyString<Ty>::operator +=const CMyString<Ty> &other)
    {
     m_uCout 
    += other.m_uCout;
     mycat(m_Buf,other.m_uCout,other.m_Buf);
     
    return *this;
    }


     

    typedef CMyString
    <char> cstring; 
    int _tmain(int argc, _TCHAR* argv[])
    {
     
     cstring a(
    "aaa");
     cstring b(a);
     cstring c 
    = b;
     c 
    = "ccc";
     
     c.c_str();
     cstring d 
    = "ddd";
     d 
    += c;
     d 
    += "abcde111";

     
    return 0;
    }



     
  • 相关阅读:
    SqlServer 本地连接打不开
    Ftp服务器搭建方法
    SQL分页查询
    sql 多表更新
    SQL 循环截取指定位置字符串
    创建在“system.net/defaultProxy”配置节中指定的 Web 代理时出错。
    python入门学习的第一天
    操作系统第二章总结/
    操作系统第一章总结/
    终端执行for循环
  • 原文地址:https://www.cnblogs.com/8586/p/1493762.html
Copyright © 2020-2023  润新知