注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Mihooke's blog

IT之恋

 
 
 

日志

 
 

一个string类的具体实现  

2014-11-15 13:46:03|  分类: C++ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

已知 String类定义如下: 

 

class String 

public: 

String(const char *str = NULL); // 通用构造函数 

String(const String &another); // 拷贝构造函数 

~ String(); // 析构函数 

String & operater =(const String &rhs); // 赋值函数 

private: 

char *m_data; //  用于保存字符串 

}; 

 

尝试写出类的成员函数实现。 

 

答案: 

String::String(const char *str) 

if ( str == NULL ) //strlen在参数为 NULL 时会抛异常才会有这步判断 

m_data = new char[1] ; 

m_data[0] = '\0' ; 

else 

m_data = new char[strlen(str) + 1]; 

strcpy(m_data,str); 

}  

 

String::String(const String &another) 

m_data = new char[strlen(another.m_data) + 1]; 

strcpy(m_data,another.m_data); 

 

String& String::operator =(const String &rhs) 

{ //这里没有考虑异常安全性,即假设内存够用,new分配内存成功。

if ( this == &rhs) 

return *this ; 

delete []m_data; //删除原来的数据,新开一块内存 

m_data = new char[strlen(rhs.m_data) + 1]; 

strcpy(m_data,rhs.m_data); 

return *this ; //这个重载运算符,return值一定要是引用

 

 

String::~String() 

if( m_data!=NULL )

delete []m_data ; 


  评论这张
 
阅读(161)| 评论(2)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017