#include#include #strcpyusing namespace std;class String{public: String(const char* str = NULL): m_str(strcpy(new char[strlen(str?str:"")+1], str?str:"")){} ~String(){ if(m_str){ delete [] m_str; m_str = NULL; } } //拷贝构造 String(const String& that): m_str(strcpy(new char[strlen(that.m_str)+1],that.m_str)){} //拷贝赋值,成员变量m_str为指针为指针时,要注意深拷贝,这里为深拷贝 String& operator=(const String& that){ if(&that != this){ char* = new char[strlen(that.m_str)+1]; delete[] m_str;//先释放旧资源 m_str = strcpy(str,that.m_str); } return *this; } friend ostream& operator<<(ostream& os,const String&c){ os << c.m_str; return os; } //c接口 const char* c_str(void)const{ return m_str; }public: char* m_str; };int main(void){ String s1("hello,world"); cout << s1 << endl; return 0;}