参考自 https://blog.csdn.net/lplp90908/article/details/77876988 (他最后地方的拷贝构造函数写错了,*this这个地方,可以把这两行删除)
测试代码如下:
//21_0122 手写String 函数 拷贝构造 析构 构造 class String { public: String(const char* str = NULL); //普通的构造函数 String(const String& other); //拷贝构造函数 ~String(); String& operator = (const String& other); //赋值操作符 void getData(); void setData(const char* p); private: char* m_data; }; String::String(const char* str) { if(str == NULL) { m_data = new char[1]; *m_data = '\0'; } else { int len = strlen(str); m_data = new char[len+1]; strcpy(m_data,str); } } String::~String() { if(m_data != NULL) { delete[] m_data; m_data = NULL; } } String::String(const String& other) //思考一下为啥是引用 (明白了 这样就是效率高 这个传值也可以但是传引用快) { int len = strlen(other.m_data); m_data = new char[len+1]; strcpy(m_data,other.m_data); } String& String::operator=(const String& other) //这种要把返回类型写在前面 { delete[] m_data; int len = strlen(other.m_data); m_data = new char[len+1]; strcpy(m_data,other.m_data); return *this; } void String::getData() { cout<<"This data is "<<m_data<<endl; } void String::setData(const char* p) { if(m_data != NULL) { delete[] m_data; } int len = strlen(p); m_data = new char[len+1]; strcpy(m_data,p); cout<<"after set this str is "<<m_data<<endl; }