類string的構造函數、拷貝構造函數和析構函數

引用http://www.cppblog.com/life02/archive/2011/03/07/96085.html  在這個帖子的基礎上稍微添加修改了點內容。

String 類的原型如下

class String
{
   public:
          String(const char *str=NULL); //構造函數
          String(const String &other); //拷貝構造函數
          ~String(void); //析構函數
          String& operator=(const String &other); //等號操作符重載

          ShowString();


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


String::~String()
{
    delete [] m_data; //析構函數,釋放地址空間
}
String::String(const 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(const String &other)//拷貝構造函數,功能與構造函數類似。
{
    int length=strlen(other.m_data);
    m_data=new [length+1];
    strcpy(m_data,other.m_data);
}
String& String::operator =(const 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, const 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章