您的位置:首页 > 其它

实现自己的字符串类String

2016-03-24 16:12 483 查看

原因

因为string预分配与SDS上比较有些不足,所以重新封装了自己的字符串类String。

类的名称(编号)

FDB_String.h

FDB_String.h

类的声明与作用

FDB中的字符串类。

类开发的必要性,唯一性

以有文档,见compare_string_SDS.md

类中各函数的复杂度,可能瓶颈

new的使用仍有瓶颈。

且存在new的遗留问题。

类的声明与定义

class String
{
//重载部分运算符
//重载 '>','<','==','!='关系运算符
friend bool operator<(const String &lhs, const String &rhs);
friend bool operator>(const String &lhs, const String &rhs);
friend bool operator==(const String &lhs, const String &rhs);
friend bool operator!=(const String &lhs, const String &rhs);
//重载输入输出运算符
friend std::ostream& operator<<(std::ostream &os, const String &rhs);
friend std::istream& operator>>(std::istream &is, String &rhs);
//重载相加运算符
friend String operator+(const String &lhs, const String &rhs);
friend String operator+(const String &lhs, const char *rhs);

private:
int size;       //字符串已用长度
int free;       //字符串已经使用长度
char *str;      //空闲长度
public:
String();                     //无参构造
String(char *rhs);            //行参为char* 构造函数
String(const String &rhs);    //复制构造函数
~String();                   //析构函数

//重载运算符
String & operator=(const String &rhs);  //赋值运算符
String & operator=(const char *rhs);    //行参为char* 的赋值运算符
char& operator[](int i);                //下标运算符
String& operator+=(const String &rhs);  //复合赋值运算符
String& operator+=(const char *rhs);    //行参为char *的复合赋值运算符

//接口函数
int getsize() const;                //获取当前字符串已用空间
int getfree() const;                //获取字符串空闲空间
void Print();                   //打印字符串
String &StringAdd(const String &str2);      //向字符串添加String类型内容
String &StringAdd(const char *s);           //向字符串添加char *类型的内容
String &StringClear();              //清除字符串内容
String &StringSizeClear(size_t pos, size_t len);    //以pos开始清除之后len长度的内容
String &StringChange(const char *s);        //修改字符串为s
String &StringChange(const String &str2);       //修改字符串为str2
};


类成员函数接口说明

友元函数:

1.friend bool operator<(const String &lhs, const String &rhs);
以lhs对象和rhs对象中的str成员比较大小。若lhs大于rhs则返回ture,否则返回false。
2.friend bool operator>(const String &lhs, const String &rhs);
以lhs对象和rhs对象中的str成员比较大小。若lhs小于rhs则返回ture,否则返回false。
3.friend bool operator==(const String &lhs, const String &rhs);
判断lhs对象和rhs对象中的str成员相等。若相等返回ture,否则返回false。
4.friend bool operator!=(const String &lhs, const String &rhs);
判断lhs对象和rhs对象中的str成员相等。若不相等返回ture,否则返回false。
5.friend std::ostream& operator<<(std::ostream &os, const String &rhs);
将rhs对象中str对象打印出来。
6.friend std::istream& operator>>(std::istream &is, String &rhs);
将is流内的数据写入rhs对象内。
7.friend String operator+(const String &lhs, const String &rhs);
将lhs对象和rhs对象向加,返回向加后的结果。
8.friend String operator+(const String &lhs, const char *rhs);
将lhs对象和rhs数组向加,返回向加后的结果。


成员函数:

1.int getsize() const;
获取当前字符串已用空间,无参
2.int getfree() const;
获取字符串空闲空间,无参
3.void Print();
打印字符串,无参
4.String &StringAdd(const String &str2);
向字符串添加String类型内容。参数str2为需要添加的String类字符串。返回添加后的字符串。
5.String &StringAdd(const char *s);
向字符串添加char *类型的内容.参数s为需要添加的char *类型字符串。返回添加后的字符串。
6.String &StringClear();
清除字符串内容,无参,返回清除后的字符串。
7.String &StringSizeClear(size_t pos, size_t len);
以pos开始清除之后len长度的内容,参数以说明,返回清除后的字符串。
8.String &StringChange(const char *s);
修改字符串为s。参数s为代替原字符串的char*类型字符串。返回改变后的字符串。
9.String &StringChange(const String &str2);
修改字符串为str2。参数str为代替原字符串的String类类型字符串。返回改变后的字符串。
10.String & operator=(const String &rhs);
赋值运算符。将rhs对象赋值给this对象。返回this对象。
11.String & operator=(const char *rhs);
行参为char* 的赋值运算符。将rhs数组赋值给this对象。返回this对象
12.char& operator[](int i);
下标运算符。获取this对象中str成员下标为i的引用。
13.String& operator+=(const String &rhs);
复合赋值运算符。将rhs对象与this对象相加并赋值给this对象。
14.String& operator+=(const char *rhs);
行参为char *的复合赋值运算符。将rhs数组与this对象相加并赋值给this对象。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: