如何用c语言实现CString的构造函数、析构函数和赋值函数?

编写类String的构造函数、析构函数和赋值函数  
  已知类String的原型为:  
  class     String  
  {  
  public:  
  String(const   char*str=NULL);//普通构造函数  
  String(const   String&other);         //拷贝构造函数  
  ~String(void);                                 //构析函数  
  String&operate=(const   String&other);         //赋值函数  
  Private:  
  Char       *m_data; //用于保存字符串  
  };  
  请编写String的上述4个函数。

String::String(const   char*str=NULL)  
  {  
  if(str   ==   NULL)  
  {  
  Init();  
  return   ;  
  }  
  int   nLen   =   SafeStrlen(str)   +   1;  
  if   (nLen   !=   1)  
  {  
  m_data   =   new   char[nLen];  
                                      memset(m_data,   0,   nLen);  
  memcpy(m_data,   lpsz,   nLen*sizeof(char));  
  }  
  else   Init();  
  }  
  String::String(const   String&other)  
  {  
          int   len   =   SafeStrlen(other.m_data)   +   1;  
          m_data   =   new   char[len];  
          memset(m_data,   0,   len);  
          memcpy(m_data,   other.m_data,   len);  
  }  
   
  String::~String()  
  //     free   any   attached   data  
  {  
  if(m_data)  
  delete   []m_data;  
  }  
   
  const   String&   String::operator=(const   String&   other)  
  {  
  char*   pOldData   =   m_data;  
  int   len   =   SafeStrlen(other.m_data)   +   1;  
  if(   len   !=   1   )  
  {  
  m_data   =   new   char[len];  
  memset(m_data,   0,   len);  
  memcpy(m_data,   other.m_data,   len);  
  if(pOldData)   delete[]pOldData;  
                                  return   *this;  
  }  
   
                  if(pOldData)   delete[]pOldData;  
                  Init();  
  return   *this;  
  }  
   
  void   String::Init()  
  {  
  m_data   =   new   char[1];    
  *m_data   =   '/0';  
  }  
   
  int   String::SafeStrlen(LPCTSTR   lpsz)  
  {    
  return   (lpsz   ==   NULL)   ?   0   :   strlen(lpsz);    
  }  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值