實現自己的字符串類String

原因

因爲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對象。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章