#include <iostream> #include "stddef.h" #include <cstring> using namespace std; class String { private: uint32_t len; // 注意 private char* str_p; public: String(const char* str); // 构建函数无返回值 ~String(); // 注意析构函数 String& operator+(const char* str); // 注意const char * String& operator=(const String& str); // 注意返回值 String& 和 参数 const String & const char* to_str() const; // 尾部const }; String::String(const char* str) { if (NULL == str) { uint32_t len = 0; str_p = new char[len+1]; strcpy(str_p, ""); } else { uint32_t len = strlen(str); str_p = new char(len+1); strcpy(str_p, str); } } String::~String() { delete[] str_p; len = 0; } String& String::operator+(const char* str) { if (NULL == str) { return *this; } else { uint32_t new_len = len+strlen(str); char* new_tmp = new char[new_len]; strcpy(new_tmp, str_p); strcat(new_tmp, str); delete[] str_p; str_p = new_tmp; } return *this; } String& String::operator=(const String& str) { if (this == &str) { return *this; } else { uint32_t new_len = strlen(str.to_str()); delete[] str_p; str_p = new char[new_len]; strcpy(str_p, str.to_str()); } return *this; } const char* String::to_str() const{ return str_p; } int main() { String str("hello world"); str = str + " 2"; cout<<str.to_str()<<endl; }