C++ String简易实现

来源:互联网 发布:deepin15 linux 教程 编辑:程序博客网 时间:2024/05/16 10:36

这是之前学习C++时,书中要求自己实现一份简易String,然后就实现了一份....下面是部分功能代码,提供给需要的人参考下,如果有什么问题也可以下方评论~

“kString.h”

#ifndef KSTRING_H_#define KSTRING_H_#include <iostream>class kString{private:    char* str;    int Len;public:    //构造函数和析构函数    kString();    kString(const char* str_t);    kString(const kString& t);    kString& operator=(const kString& t);    ~kString();    int kSize();    char& operator[](int n);    char operator[](int n)const;    //关系运算符重载    friend bool operator>(const kString& s1,const kString& s2);    friend bool operator<(const kString& s1,const kString& s2);    friend bool operator==(const kString& s1,const kString& s2);    friend bool operator>=(const kString& s1,const kString& s2);    friend bool operator<=(const kString& s1,const kString& s2);    friend std::ostream& operator<<(std::ostream& out_t, const kString& t);};#endif
“kString.cpp”

#include "kString.h"#include <iostream>//默认构造函数 创建空StringkString::kString(){    str = NULL;    Len = 0;}kString::kString(const char* str_t){    Len = strlen(str_t);    str = new char[Len+1];    strcpy(str,str_t);}kString::kString(const kString& t){    Len = t.Len;    str = new char[Len+1];    strcpy(str,t.str);}//虽然加入证同测试的赋值操作 但是该函数并不具备异常安全性kString& kString::operator=(const kString& t){    if(this==&t){       //证同测试        return *this;    }else{        delete []str;        Len = t.Len;        str = new char[Len+1];    //这里可能会引发异常(std::bad_alloc)导致类数据败坏        strcpy(str,t.str);        return *this;    }}/*//既有证同测试也增加了异常安全性kString& kString::operator=(const kString& t){    if(this==&t){        return *this;    }else{        char* str_t = str;      //用作临时存储 当new正常执行没发生异常 再将旧指针所指内存释放掉        Len = t.Len;        str = new char[Len+1];        strcpy(str,t.str);        delete str_t;        return *this;    }}*///析构函数 用于释放指向的字符串所在内存kString::~kString(){    delete[]str;}//返回当前String字符数int kString::kSize(){    return Len;}//重载<< 以便可以直接对kString对象进行输出操作std::ostream& operator<<(std::ostream& out_t, const kString& t){    out_t << t.str;    return out_t;}//non-const版char& kString::operator[](int n){    return str[n];}////const char& kString::operator[](int n)const{//    return str[n];//}//const版 用于const对象时调用char kString::operator[](int n)const{    return str[n];}//以下是对关系运算符重载 以便可以直接对该kString对象进行比较bool operator>(const kString& s1,const kString& s2){    if(strcmp(s1.str,s2.str)>0){        return true;    }else{        return false;    }}bool operator<(const kString& s1,const kString& s2){    if(strcmp(s1.str,s2.str)<0){        return true;    }else{        return false;    }}bool operator==(const kString& s1,const kString& s2){    if(strcmp(s1.str,s2.str)==0){        return true;    }else{        return false;    }}bool operator>=(const kString& s1,const kString& s2){    if(strcmp(s1.str,s2.str)>0 || strcmp(s1.str,s2.str)==0){        return true;    }else{        return false;    }}bool operator<=(const kString& s1,const kString& s2){    if(strcmp(s1.str,s2.str)<0 || strcmp(s1.str,s2.str)==0){        return true;    }else{        return false;    }}
测试代码就不帖上来了,测试功能都正常~因为是简易版与C++String相比还是有很多功能没有去实现,有兴趣的可以加以完善 添加其他相应功能~

原创粉丝点击