class String{
public:
String(const char *str=NULL);//构造函数
String(const String&str);//拷贝构造函数
~String();//析构函数
String operator+(const String&str)const;//+操作没有改变原来字符串,返回的是新的,对任何字符串没修改,所以是const
String& operator=(const String&str);//重载=符号,对String类型赋值
String& operator+=(const String&str);//重载+=符号,对String类型+=
bool operator==(const String&str)const;//重载==符号,判断两个String类型是否想等
size_t size()const;//获取长度
char*c_str()const;//转化成char类型数组
private:
char *data;//存放数据
size_t length;//存放String长度,不包含最后一位的'\0'
};
String::String(const char*str){//构造函数
if(str==NULL){//传入字符数组长度为0
length=0;
data=new char[1];
*data='\0';//char类型数组在结尾加一个'\0'表示结束
}else{//传入字符数组长度>0,初始化String length并拷贝内容
length=strlen(str);
data=new char[length+1];//最后留一位给字符串结束标记'\0'
strcpy(data,str);
}
}
String::String(const String &str){//拷贝构造函数
length=str.size();
data=new char[length+1];
strcpy(data,str.c_str());
//strcpy(data,str.data);
}
String String::operator+(const String&str)const{
String newString;
newString.length=length+str.length;
newString.data=new char[newString.length];
strcpy(newString.data,data);
strcat(newString.data,str.data);//字符串拼接,也可以把str.data写成str.c_str(),返回的都是data第一个元素的指针
return newString;
}
String&String::operator=(const String&str){
if(data==str.data)
return *this;
length=str.length;
delete[]data;
data=new char[length+1];
strcpy(data,str.data);
return *this;
}
String &String::operator+=(const String&str){
length+=str.length;
char*newData=new char[length+1];
strcpy(newData,data);
strcat(newData,str.data);
delete[]data;
data=newData;
return *this;
}
inline bool String::operator==(const String&str)const{
if(length!=str.length)
return false;
return strcmp(data,str.data)?true:false;
}
inline size_t String::size()const{
return length;
}
inline char* String::c_str()const{//String转化成char数组实际上就是拿data第一个元素指针
return data;
}
String::~String(){
delete[]data;
length=0;
}
c++中的String实现
猜你喜欢
转载自blog.csdn.net/qq_33278461/article/details/80873093
今日推荐
周排行