c++編寫類String的建構函式、解構函式和賦值函式
阿新 • • 發佈:2019-02-03
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++基本功!