C++沉思錄__String類的設計
阿新 • • 發佈:2018-11-22
class String { public: String(char* p){ assign(p, strlen(p)); } String(const String& s){ assign(s.data, s.sz); } ~String(){delete[] data;} void make_cstring(char* p, int len) const { if(sz <= len) strcpy(p, data); else throw("Not enough memory supplied"); } String& operator=(const String& s){ //不能先刪除資料然後呼叫assign,因為把一個String賦給它自身肯定會失敗 if(this != &s){ delete[] data; assign(s.data, s.sz); } return *this; } String& String::operator+=(const String& s) { char* odata = data; assign(odata, sz+s.sz+1); strcat(data, s.data); delete [] odata; return *this; } private: int sz; char* data; void assign(const char* s, unsigned len) { int n =len +1; data = (char*)malloc(n*sizeof(char)); if(data == 0) throw std::bad_alloc(); sz = len; strcpy(data, s); } }; String operator+(const String& op1, const String& op2) { String ret(op1); ret += op2; return ret; }