class String |
{ |
public : |
String( const char *str = NULL); // 普通构造函数 |
String( const String &other); // 拷贝构造函数 |
~ String( void ); // 析构函数 |
String & operate =( const String &other); // 赋值函数 |
private : |
char *m_data; // 用于保存字符串 |
}; |
// String 的析构函数 |
String::~String( void ) |
{ |
delete [] m_data; |
// 由于m_data 是内部数据类型,也可以写成delete m_data; |
} |
// String 的普通构造函数 |
String::String( const char *str) |
{ |
if (str==NULL) |
{ |
m_data = new char [1]; // 若能加NULL 判断则更好 |
*m_data = ‘\0’; |
} |
else |
{ |
int length = strlen (str); |
m_data = new char [length+1]; // 若能加NULL 判断则更好 |
strcpy (m_data, str); |
} |
} |
// 拷贝构造函数 |
String::String( const String &other) |
{ |
int length = strlen (other.m_data); |
m_data = new char [length+1]; // 若能加NULL 判断则更好 |
strcpy (m_data, other.m_data); |
} |
// 赋值函数 |
String & String::operate =( const String &other) |
{ |
// (1) 检查自赋值/ |
if ( this == &other) |
return * this ; |
// (2) 释放原有的内存资源 |
delete [] m_data; |
// ()分配新的内存资源,并复制内容 |
int length = strlen (other.m_data); |
m_data = new char [length+1]; // 若能加NULL 判断则更好 |
strcpy (m_data, other.m_data); |
// ()返回本对象的引用 |
return * this ; |
} |