string類的實現

2021-08-08 05:48:26 字數 2006 閱讀 7631

一,目標

此次目的很明顯,實現string類中的主要方法,包括:建構函式,拷貝建構函式,+,+=運算子的過載等。

在實際的面試中,關於string的問題會很多,因此自己實現一遍很有必要。

二,**實現

1,首先看宣告

#pragma once

#include

using

namespace

std;

class mystring

mystring& operator=(const mystring& other); //賦值運算子過載

mystring operator+(const mystring& x);

mystring& operator+=(const mystring& x);

bool

operator==(const mystring& x);

friend ostream& operator

<

~mystring();

private:

char* str;

};

2,具體實現

//如果x==null,則申請乙個位元組用來存放結束符,之所以這樣做,是擔心直接cout乙個null的str

mystring::mystring(const

char* x)

else

}mystring::mystring(const mystring& x)

//這裡之所以要檢測是否自賦值是因為如果不檢測,直接將原始的str清空後,就沒辦法再給自己複製了

//因為它們指向同一塊區域

mystring& mystring::operator=(const mystring& other)

mystring mystring::operator+(const mystring& x)

mystring& mystring::operator+=(const mystring& x)

bool mystring::operator==(const mystring& x)

ostream& operator

<

mystring::~mystring()

3,測試**

void test()

注意以上執行還不會成功,需要加入指令:#pragma warning(disable:4996)

這是因為c++認為strcpy等函式不安全,所以已經選擇棄用,加入這句指令,就是指忽略相應

的警告。

3,執行結果

注意此處的除錯資訊在上面的**中並沒有新增,只是為了測試我的猜想

測試是從z的定義那裡產生的,

3.1,首先呼叫建構函式,用字串給z賦值

3.2 呼叫加號運算子,生成temp的臨時物件,使我不解的是此處為什麼沒有呼叫建構函式呢?

然後呼叫拷貝建構函式生成temp的拷貝物件返回,接著析構temp;

3.3,接著呼叫等號運算子,把這個拷貝物件再賦給z;

3.4,析構z,x,y

4,總結

1,其實還有很多string類的功能沒有實現,以我的理解,只要理解了底層的實現細節,對自己以後使用相應的方法是很有幫助的,畢竟是自己完成過

2,to_str()方法其實就是直接返回 (const char*) str;

3,拷貝建構函式與=建構函式的不同便是,拷貝建構函式是一種特殊的建構函式,所以它是用來初始化乙個物件的,而=運算子則是用來給乙個已經存在的物件重新賦值

4,每個類都提供了預設的建構函式,拷貝建構函式,析構函式,=運算子,之所以還要自己重新定義,這就設計淺拷貝與深拷貝的問題了,關於這點,有興趣的可以自己去了解

string類的實現

參考c primer.string類的實現,清翔兔 06,jan.includeusing namespace std class string string void private char m data inline string string const char str inline st...

String類的實現

學習資料結構寫了乙個string的類,貼出來求指教 ifndef string h h define string h h include include include define defaultsize 128 class string maxsize為傳入引數的string string c...

string類的實現

include using namespace std class string public string const char str 0 普通建構函式 string const string other 拷貝建構函式 string void 析構函式 string operator const...