c++中的String实现

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;
}

猜你喜欢

转载自blog.csdn.net/qq_33278461/article/details/80873093