class String
{
private:
char *m_data; //私有成员,保存字符串
public:
String(const char *str = NULL); //普通构造函数
String(const String &other); //复制构造函数
~String(void); //析构函数
String & operator =(const String &other); //赋值函数
};
String::String(const char *str = NULL) //带一个指针的普通构造函数
{
if(str == NULL)
{
m_data = new char[1]; //分配一个字节
assert(m_data != NULL);
*m_data = '\0';
}
else
{
m_data = new char[strlen(str)+1]; //分配空间容纳str内容
assert(m_data != NULL);
strcpy(m_data,str);
}
}
String::String(const String &other) //拷贝构造函数
{
m_data = new char[strlen(other.m_data)+1];
assert(m_data != NULL);
strcpy(m_data,other.m_data);
}
String::~String(void) //析构函数
{
if(m_data != NULL)
{
delete []m_data;
m_data = NULL;
}
}
String & String::operator=(const String &other) //赋值函数
{
if(&other == this) //如果对象与other是同一个对象
return *this;
delete []m_data; //释放堆内存
m_data = new char[strlen(other.m_data)+1];
assert(m_data != NULL);
strcpy(m_data,other.m_data);
return *this;
}