这个题目来自高质量编程一书,确实是经典题,很多公司都喜欢考。
class String { public: String(const char *str = NULL); //普通构造函数
String(const String &other); //拷贝构造函数
~String(void); //析构函数
String & operator=(const String &other); //赋值函数
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]; //记得是length+1,末尾需要一个'\0'
strcpy(m_data, str); //拷贝数据
} }
String::String(const String &other) { int length = strlen(other.m_data); m_data = new char[length + 1]; //记得是length+1,末尾需要一个'\0'
strcpy(m_data, other.m_data); //拷贝数据
}
String::~String() { delete[] m_data; }
String & String::operator=(const String &other) { if(this == &other) //自检,这一步很容易漏掉
return *this;
delete[] m_data; //先释放掉原来的资源,再用来存放新数据
int length = strlen(other.m_data); m_data = new char[length + 1]; //记得是length+1,末尾需要一个'\0'
strcpy(m_data, other.m_data); //拷贝数据
return *this; }
|
阅读(649) | 评论(0) | 转发(0) |