编写 类string的构造函数、析构函数、赋值函数
#include <iostream>
//#include <string>
// iostream 包含了strlen、strcpy?
using namespace std;
class String {
public:
// 构造函数
String( const char * str = NULL ) {
if ( NULL == str ) {
if ( NULL == ( m_data = new char[1] ) ) {
return;
}
m_data = new char[1];
*m_data = '\0';
} else {
int length = strlen(str);
if ( NULL == ( m_data = new char[length+1] ) ) {
return;
}
strcpy( m_data, str );
}
}
// 拷贝构造函数
String( const String &other ) {
int length = strlen( other.m_data );
if ( NULL == ( m_data = new char[length+1] ) ) {
return;
}
strcpy( m_data, other.m_data );
}
// 析构
~String(void) {
delete [] m_data;
}
// 赋值
String * operator = ( const String &other ) {
if ( &other == this ) {
// 检查是否自赋值
return this;
}
delete [] m_data;
int length = strlen( other.m_data );
if ( NULL == ( m_data = new char[length+1] ) ) {
return NULL;
}
strcpy( m_data, other.m_data );
return this;
}
protected:
private:
char * m_data;
};
int main(int ac, char** av)
{
String s1("Hello world!"); // 构造函数
String s2=s1; // 拷贝构造函数
String s3; // 赋值
s3 = s2;
printf("%s\n", s1);
printf("%s\n", s2);
printf("%s\n", s3);
return 0;
}