1. gzyueqian
      13352868059

      C++中string類的實現干貨 為你的嵌入式培訓做準備吧!

      更新時間: 2017-04-06 15:51:08來源: 粵嵌教育瀏覽量:3292

        C++中string類的實現干貨,為你的嵌入式培訓做準備吧!String是C++中的重要類型,程序員在C++面試中經常會遇到關于String的細節問題,甚至要求當場實現這個類。只是由于時間關系,可能只要求實現構造函數、析構函數、拷貝構造函數等關鍵部分。
        String的實現涉及很多C++的基礎知識、內存控制及異常處理等問題,仔細研究起來非常復雜,本文主要做一個簡單的總結和歸納。
        一、整體框架
        面試時由于時間關系,面試官一般不會要求很詳盡的String的功能,一般是要求實現構造函數、拷貝構造函數、賦值函數、析構函數這幾個非常重要的部分。因為String里涉及動態內存的管理,默認的拷貝構造函數在運行時只會進行淺復制,即只復制內存區域的指針,會造成兩個對象指向同一塊內存區域的現象。如果一個對象銷毀或改變了該內存區域,會造成另一個對象運行或者邏輯上出錯。這時就要求程序員自己實現這些函數進行深復制,即不止復制指針,需要連同內存的內容一起復制。
        除了以上四個必須的函數,這里還實現了一些附加的內容。
        1.若干個運算符重載,這里的幾個是常見的運算符,可以加深對String的認識和運算符重載的理解。
        2.兩個常用的函數,包括取字符串長度和取C類型的字符串。
        3.兩個處理輸入輸出的運算符重載,為了使用的方便,這里把這兩個運算符定義為友元函數。
        整體的類的框架如下所示。
        class String
        {
        public:
        String(const char *str = NULL); //通用構造函數
        String(const String &str);  //拷貝構造函數
        ~String();      //析構函數
        String operator+(const String &str) const; //重載+
        String& operator=(const String &str);  //重載=
        String& operator+=(const String &str);  //重載+=
        bool operator==(const String &str) const; //重載==
        char& operator[](int n) const;    //重載[]
        size_t size() const;  //獲取長度
        const char* c_str() const; //獲取C字符串
        friend istream& operator>>(istream &is, String &str);//輸入
        friend ostream& operator<<(ostream &os, String &str);//輸出
        private:
        char *data;  //字符串
        size_t length; //長度
        };
        注意,類的成員函數中,有一些是加了const修飾的,表示這個函數不會對類的成員進行任何修改。一些函數的輸入參數也加了const修飾,表示該函數不會對改變這個參數的值。
        二、具體實現
        下面逐個進行成員函數的實現。
        同樣構造函數適用一個字符串數組進行String的初始化,默認的字符串數組為空。這里的函數定義中不需要再定義參數的默認值,因為在類中已經聲明過了。另外,適用C函數strlen的時候需要注意字符串參數是否為空,對空指針調用strlen會引發內存錯誤。
        String::String(const char *str)//通用構造函數
        {
        if (!str)
        {
        length = 0;
        data = new char[1];
        *data = '亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

        
        

        1. 中文乱码在线精品日本 | 在线网站亚洲观看 | 日韩精品视频在线观看メイド | 在线观看不卡免费视频 | 亚洲国产空姐精品视频中文字幕 | 亚洲高清aⅴ日本欧美视频 亚洲性爱国产性爱 |