类string的构造函数、拷贝构造函数和析构函数

http://www.cnblogs.com/Laokong-ServiceStation/archive/2011/04/19/2020402.html

引用http://www.cppblog.com/life02/archive/2011/03/07/96085.html  在这个帖子的基础上稍微添加修改了点内容。
String 类的原型如下
class String
{
   public:
          String(co n st char *str=NULL); //构造函数
          String(co n st String &other); //拷贝构造函数
          ~String(void); //析构函数
          String& operator=(co n st String &other); //等号操作符重载
          ShowString();

   private:
          char *m_data; //指针
};

String::~String()
{
    delete [] m_data; //析构函数,释放地址空间
}
String::String(co n st char *str)
{
    if (str==NULL)//当初始化串不存在的时候,为m_data申请一个空间存放'\0';
     {
        m_data=new char[1];
        *m_data='\0';
     }
    else//当初始化串存在的时候,为m_data申请同样大小的空间存放该串;
     {
        int length=strlen(str);
        m_data=new char[length+1];
        strcpy(m_data,str);
     }
}

String::String(c o n st String &other)//拷贝构造函数,功能与构造函数类似。
{
    int length=strlen(other.m_data);
    m_data=new [length+1];
    strcpy(m_data,other.m_data);
}
String& String::operator =(co n st String &other) 
{
    if (this==&other)//当地址相同时,直接返回;
        return *this; 

    delete [] m_data;//当地址不相同时,删除原来申请的空间,重新开始构造;
    int length= strlen (other.m_data);
    m_data=new [length+1];
    strcpy(m_data,other.m_data);
    return *this; 
}
String::ShowString()//由于m_data是私有成员,对象只能通过public成员函数来访问;
{
         cout<<this->m_data<<endl;
}
main()
{
String AD;
char * p="ABCDE";
String B(p);
AD.ShowString();
AD=B;
AD.ShowString();

}
1. strCopy 函数可以为标准库函数 char *strcpy(char *dest, co n st char *src); 
    需要#inculde <string.h>
2.参考连接:
   高质量C++C编程指南 http://man.chinaunix.net/develop/c&c++/c/c.htm
    字符串函数 http://www.ggv.com.cn/forum/clib/string/strcpy.html

posted @ 2012-09-07 13:26  六界剑仙  阅读(112)  评论(0)    收藏  举报