类string的原代码:
class String{
public:
String(const char *str=NULL);//普通构造函数
~String();//析构函数
String(const String &other);//拷贝析构函数
String::operator=(const String &other);//赋值函数
String::operator+(const String &other);//字符串连接
bool operator==(const String &other);//判断相等
int getLength();//获取长度
private:
char *m_data;//私有成员
};
1.string构造函数
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];
strcpy(m_data,str);
}
}
2.string的析构函数
String::~String(){
if(m_data){
delete[] m_data;//delete m_data;
m_data=0;
}
}
3.string拷贝构造函数
String::String(const String &other){
if(!other.m_data){
m_data=0;
}
m_data = new char[strlen(other.m_data)+1];
strcpy(m_data,other.m_data);
}
4.赋值函数
String & String::operator=(const String &other){
if(this!=&other){
delete[] m_data;
if(!other.m_data){
m_data=0;
}
else{
m_data=new char[strcpy(other.m_data)+1];
strcpy(m_data,other.m_data);
}
}
return *this;
}
5.字符串连接
String & String::operator+(const String &other){
String newstring;
if(!other.m_data){
newstring=*this;
}
else if(!m_data){
newstring=other;
}
else{
newstring.m_data=new char[strlen(m_data)+strlen(other.m_data)+1];
strcpy(newstring.m_data,m_data);
strcat(newstring.m_data,other.m_data);
}
return newstring;
}
6.判断相等
bool String::operator==(const String &other){
if(strlen(m_data)!=strlen(other.m_data)){
return false;
}
else{
return strcmp(m_data,other.m_data)?false:true;
}
}
7.返回长度
int String::getLength(){
return strlen(m_data);
}