1. 程式人生 > >c++編寫類String的建構函式、解構函式和賦值函式

c++編寫類String的建構函式、解構函式和賦值函式

C++程式碼 

按 Ctrl+C 複製程式碼 複製程式碼
class String 
{ 
public: 
     String(const char *str = NULL);// 普通建構函式      String(const String &other);    // 拷貝建構函式      ~ String(void);    // 解構函式      String & operate =(const String &other);// 賦值函式 private: 
     char *m_data;// 用於儲存字串 }; 
複製程式碼 按 Ctrl+C 複製程式碼

請編寫String的上述4個函式。 

C++程式碼 

複製程式碼
//普通建構函式 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;         //得分點:返回本物件的引用 }
複製程式碼

剖析: 

  能夠準確無誤地編寫出String類的建構函式、拷貝建構函式、賦值函式和解構函式的面試者至少已經具備了C++基本功的60%以上!在這個類中包括了指標類成員變數m_data,當類中包括指標類成員變數時,一定要過載其拷貝建構函式、賦值函式和解構函式,這既是對C++程式設計師的基本要求,也是《Effective C++》中特別強調的條款。仔細學習這個類,特別注意加註釋的得分點和加分點的意義,這樣就具備了60%以上的C++基本功!