string類的建構函式,拷貝建構函式,解構函式和賦值函數

來源:互聯網
上載者:User
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=sizeof(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();}========================================================================= 再來淡淡關於拷貝建構函式和賦值函數的使用比較       上例是比較拷貝建構函式和賦值函數很好的樣本。       拷貝建構函式,首先是一個建構函式,因此函數實現的是拷貝它唯一const參數引用變數(也是對象)的內部資料作為初始化。所以對象建立時使用構造拷貝函數(這時需要初始化對象)。       而賦值函數則不同。賦值函數屬於類的成員函數,並且是一個運算子多載函數。該函數應用在對象已經建立後,需要對對象賦值時使用。由於是重載函數,返回的是一個對象,而拷貝建構函式不用返回任何值。     String a("zhangbufeng");     String b("cuixiaoyuan");     String c(a);//對象建立時,使用拷貝建構函式     c=b; //c已經被初始化,從而調用了賦值函數。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.