C 筆記 物件導向程式設計(Handle類)

2021-08-07 23:19:35 字數 2191 閱讀 6627

**:

控制代碼類

控制代碼類的出現是為了解決使用者使用指標時需要控制指標的載入和釋放的問題。用指標訪問物件很容易出現懸垂指標或者記憶體洩漏的問題。

為了解決這些問題,有許多方法可以使用,控制代碼類就是其中之一。控制代碼類是一種包裝類,用於儲存和管理基類的物件指標,減輕使用者使用物件的負擔。控制代碼類使用指標執行操作,虛成員由於既可以指向基型別又可以指向派生型別,所以其行為將在執行時根據控制代碼實際繫結的物件而變化。

控制代碼類的設計有兩個重要的考慮因素:

指標型控制代碼

指標型控制代碼例子

[cpp]view plain

copy

print?

class

sales_item   

sales_item(const

item_base& item): p(item.clone()), use(

newsize_t

(1)) {}  

sales_item(const

sales_item& item):p(item.p), use(item.use)   

~sales_item()   

sales_item& operator=(const

sales_item&);  

const

item_base* operator->() 

const

;  const

item_base& operator*() 

const

;  private

:  void

decr_use();  

private

:  item_base *p;  

size_t

*use;  

};  

sales_item& sales_item::operator=(const

sales_item& rhs)  

const

item_base* sales_item::operator->() 

const

const

item_base& sales_item::operator*() 

const

void

sales_item::decr_use()  

}  

這個控制代碼類中要求item_base類中有乙個

虛函式clone

,這個虛函式的用途是解決基型別物件或者派生型別物件的複製,這樣可以不用為控制代碼類針對每一種派生型別物件建立建構函式。

[cpp]view plain

copy

print?

class

item_base  

};  

以上**即可將item_base類的指標包裝起來。通過對handler類物件的*和->操作,即可直接訪問到所包裝的item_base型別物件。

值型控制代碼

值型控制代碼例子

[cpp]view plain

copy

print?

class

query   

public

:  query(const

string& s): q(

newwordquery(s)), use(

newsize_t

(1))     

query(const

query &c): q(c.q), use(c.use)   

query& operator= (const

query&);  

~query()  

seteval(const

textquery &t) 

const

private

:  void

decr_use();  

private

:  query_base *q;  

size_t

*use;  

};  

void

query::decr_use()  

}  query& query::operator=(const

query& rhs)    

值型控制代碼不定義*和->兩個操作符,基類物件指標完全封閉在控制代碼類中。

參考: 

C 物件導向程式設計筆記(二)

c 物件導向程式設計 二 一 過載與覆蓋 成員函式被過載的特徵 1 相同的範圍 在同乙個類中 2 函式名字相同 3 引數不同 4 virtual 關鍵字可有可無。覆蓋是指派生類函式覆蓋基類函式,特徵是 1 不同的範圍 分別位於派生類與基類 2 函式名字相同 3 引數相同 4 基類函式必須有virtu...

C 學習筆記 物件導向程式設計

1.什麼是類 物件和成員?類 乙個類包含很多的物件。比如人類就是乙個類,張 三 李四等是人類的物件,這些物件擁有人類共同的功能和資料,如身高 體重 年齡等,而具體化這些資料我們可看做是人類的成員變數。所以類是由若干個變數和相關函式組成,而物件則擁有這些變數和函式。2.如何宣告乙個類?類只有先宣告才能...

c 物件導向程式設計 筆記四

1.理解堆空間和棧空間 不同建立物件的方式。2.local object 和 static local object的生命週期 3.heap object的宣告週期 注意顯式釋放。4.new 先分配memory 再呼叫ctor complex pc void mem operator new siz...