博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

Posted on 2009-06-01 15:16  浪端之渡鸟  阅读(504)  评论(0)    收藏  举报

 

// 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;
}