C 類和動態記憶體分配2 改進後的String類

2022-05-23 15:06:11 字數 1705 閱讀 2353

新增前面介紹過的複製建構函式和賦值運算子,使類能夠正確管理類物件使用的記憶體。

知道物件何時被建立和釋放。

***********************************

string::string()

delete[ ]與使用new[ ]初始化的指標和空指標都相容。

以其他方式初始化的指標,使用delete時,結果將是不確定的。

c++11空指標:

nullptr 關鍵字表示空指標;

還可以使用就標準c++98中的方式:0

***********************************=

friend bool operator == (const string &st1, const string &st2);

將比較函式作為友元,有助於將string類物件與常規的c字串進行比較。

if (「love」 == answer)

將被轉換為

if (operator==(「love」,answer));

然後編譯器將使用某個建構函式將**轉換為:

if (operator==(string(「love」), answer));

***********************************=

string opera(「the magic flute」);

對於表示式opera[4],c++將查詢名稱與特徵標與此相同的方法;

string::operator(int i)

如果找到匹配的原型,編譯器將使用下面的函式呼叫來替代表示式opera[4]:

opera.operator[ ](4)

opera物件呼叫該方法,陣列下標4成為該函式的引數。

有了上述定義:

cout <

被轉換為:

cout <

返回值將是opera.str[4]。由此公有方法可以訪問私有資料。

將返回型別宣告為char &,便可以給特定元素賦值。

string means(「might」);

means[0] = 『r』;

第二條語句被轉換為乙個過載運算子函式呼叫:

means.operator(0)=』r』;

這裡將r賦給方法的返回值,上述**等同於:

means.str[0] = 『r』;

但在過載時,c++將區分常量和非常量函式的特徵標,因此可以提供另乙個僅供const string物件使用的operator()版本。

***********************************====

可以將成員函式宣告為靜態的,函式宣告必須包含關鍵字static。

但如果函式定義是獨立的,則其中不能包含關鍵字static,這樣做有兩個重要的後果。

首先,不能通過物件呼叫靜態成員函式 ,實際上,靜態成員函式甚至不能使用this指標。

如果靜態成員函式時再公有部分宣告的,則可以使用類名和作用域運算子來呼叫它。

例如:可以給string類新增乙個名為howmany()的靜態成員函式,方法是在類宣告中新增如下原型定義:

static int howmany()

由於靜態成員函式不與特定的物件相關聯,只能使用靜態資料成員。

可以使用靜態成員函式設定類級標記,以控制某些類介面的行為,例如:類級標記可以控制顯示類內容的方法所使用的格式。

***********************************===

C 類和動態記憶體分配

預設析構函式 複製建構函式 賦值運算子 位址運算子 ifndef zhumeng h define zhumeng h include class zhumeng endif include zhumeng.h int zhumeng numm 0 zhumeng zhumeng zhumeng z...

C 類和動態記憶體分配

如果有這樣的strbad類 include ifdef strbad h define srebad h class strbad endif include include stringbad.h using std cout int strbad num 0 靜態成員變數不能在宣告中初始化 除非...

類和動態記憶體分配

part 1 靜態類成員特點 無論建立了多少物件,程式都只建立乙個靜態類變數副本。也就是說,類的所有物件共享乙個靜態成員。靜態資料成員在類宣告中宣告,在包含類方法的檔案中初始化。初始化時使用作用域運算子來指出靜態成員所屬的類。但如果靜態成員是const整數型別或列舉型,則可以在類宣告中初始化。par...