後臺開發閱讀筆記——STL(標準模板庫)的使用之string類實現
阿新 • • 發佈:2018-11-17
string類的實現:
class String { public: String(const char *str=null); String(const String &other); ~String(); String &operator =(const String &other); String &operator +(const String &other); bool operator ==(const String &other); int getLength(); private: char *m_data; } //普通建構函式 String::String(const char *str) { if(str == null) { m_data = new char[1]; *m_data = '\0'; } else { int length = strlen(str); m_data = new char[length + 1]; strcpy(m_data, str); } } //解構函式 String::~String() { if(m_data) { delete[] m_data; m_data=0; } } //拷貝建構函式 String::String(const String &other) { if(!other.m_data) { m_data=0; } m_data = new char[strlen(other.m_data)+1]; strcpy(m_data, other.m_data); } //賦值函式 String& String::operator =(const String &other) { if(this != &other) { delete[] m_data; if(!other.m_data) { m_data = 0; } else { m_data = new char[strlen(other.m_data)+1]; strcpy(m_data, other.m_data); } } return *this; } //字串連線 String &String::operator+(const String &other) { String newString; if(!other.m_data) { newString = *this; } else if(!m_data) { newString = other; } else { newString.m_data = new char[strlen(m_data)+strlen(other.m_data)+1]; strcpy(newString.m_data, m_data); strcat(newString.m_data, other.m_data); } return newString; } //判斷相等 bool String::operator ==(const String &other) { if(strlen(m_data) != strlen(other.m_data)) { return false; } else { return strcmp(m_data, other.m_data)?false:true; } } //返回長度 int String::getLength() { return strlen(m_data); }