1. 程式人生 > >寫String類的普通建構函式,解構函式,拷貝建構函式和賦值函式

寫String類的普通建構函式,解構函式,拷貝建構函式和賦值函式

編寫類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::String(const 
char *str) 



 if(str==NULL) 

 { 

  m_data new char[1]; // 得分點:對空字串自動申請存放結束標誌'\0'的空 

  //加分點:對m_data加NULL 判斷 

  *m_data '\0'; 

 } 

 else 

 { 

  int length strlen(str); 

  m_data new char[length+1]; // 若能加 NULL 判斷則更好 

  strcpy(m_data, str); 

 } 



// String的解構函式 

String::~String(void) 



 delete [] m_data; // 或delete m_data; 




//拷貝建構函式 

String::String(const String &other)    // 得分點:輸入引數為const型 



 int length strlen(other.m_data); 

 m_data new char[length+1];     //加分點:對m_data加NULL 判斷 

 strcpy(m_data, other.m_data); 



//賦值函式 

String String::operate =(const String &other) // 得分點:輸入引數為const型 




 if(this == &other)   //得分點:檢查自賦值 


  return *this; 

 delete [] m_data;     //得分點:釋放原有的記憶體資源 

 int length strlen( other.m_data ); 

 m_data new char[length+1];  //加分點:對m_data加NULL 判斷 

 strcpy( m_data, other.m_data ); 

 return *this;         //得分點:返回本物件的引用