初次邂逅控制代碼類 C primer

2021-06-07 22:44:07 字數 1969 閱讀 5237

控制代碼類儲存和管理基類指標

指標所指物件的型別可以變化,既能指向基類型別物件又可以指向派生類型別物件。

使用者通過控制代碼類訪問

繼承層次的操作 (virtual 函式)

設計考慮因素:

1)對任何儲存指標的類一樣,必須確定對複製控制的具體操作。包裝了繼承層次的控制代碼應該表現得像乙個智慧型指標或者像乙個值

2)控制代碼類決定控制代碼介面遮蔽還是不遮蔽繼承層次。 如果不遮蔽 繼承層次,使用者必須了解和使用基本層次中的物件。

指標型控制代碼

1,定義控制代碼:

三個建構函式:

預設建構函式

、複製建構函式

接受指向基類物件的建構函式

,第三個建構函式將複製基類物件,並保證: 基類物件存在,副本就存在,

兩個資料成員: 都是指標, 乙個指標指向

基類物件

; 乙個指向

使用計數

(多個控制代碼共享乙個計數器)

過載操作符:     解引用操作符:返回 基類指標指向的物件(基類或派生類);

箭頭操作符:返回基類指標

2, 使用計數式複製控制:  和智慧型指標差不多

3, 構造控制代碼

兩個建構函式: 預設建構函式建立未繫結(即該基類指標值為0)的 控制代碼物件;

上面三個建構函式的第三個(涉及到複製未知型別的操作)因為這建構函式的形參是乙個基類的引用,而要根據這個操作建立這個物件的副本, 這個引用是基類的引用,但是可能儲存的是派生類的物件。所以,這個基類需要乙個介面,可以返回這個引用實際指向的物件,這個涉及到動態繫結-> 什麼可以解決過動態繫結 -> 虛函式。所以,下面就是討論這個虛函式clone.

複製未知型別

解決這個問題 的通用方法是定義虛操作進行複製,該操作命名為clone

基類新增乙個clone 函式,為virtual 函式。 繼承層次的每個型別都要增加clone函式

clone 函式 : 返回型別: 以本類為副本 構造乙個 物件 ,返回指標值。 return new 類名(*this)

通過定義clone 函式,上面的第二個建構函式,只要用形參的基類引用呼叫clone 函式 就能返回 形參物件副本的指標。

回顧: 虛函式要求基類和派生類裡面要完全匹配,但是返回型別可以是基類或派生類,這裡明顯就顯示其大大的前瞻性!!!

個人體會:我覺得控制代碼的使用 就是對 c++ 動態繫結的 應用。

c++ 的動態繫結需要兩個條件: 1) 繼承與虛函式 ;2) 使用基類指標或引用。

所以在程式中用到的最好是基類的指標,然後通過指標去呼叫虛函式,可以根據具體不同的物件執行各種的虛函式,而單獨用指標的話會增加使用者的負擔,比如指標指向的記憶體的 申請、釋放, 這些指標之間的複製,賦值。所有這些如果都散開來做,將會很蛋疼,所以把這些操作集中起來處理,就有了智慧型指標和控制代碼類這樣的東西。

所以控制代碼類 主要要解決的操作有: 怎麼通過乙個 基類的指標 或 引用(裡面儲存的可能是基類物件 或 派生類物件)去構造本身 儲存指標指向的副本? 就是上面所說的第三個建構函式。 (回顧: 派生類指標或引用可以預設轉換到 基類指標或引用,牢牢記住)

複製控制(三種函式一般都要包括)

複製建構函式: 形參為控制代碼類本身引用的建構函式(注意計數指標的變化);

過載賦值操作符:注意計數指標的變化

析構函式: 複製釋放基類指標的內容, 和 計數指標合作,決定什麼時候應該刪除基類 

純屬個人胡扯,有不對的地方,各位大爺不吝賜教

初次邂逅sqlmap

apostrophemask 用utf8代替引號 example 1 and 1 1 1 and ef bc 871 ef bc 87 ef bc 871 equaltolike 使用like代替等號。example input select from users where id 1 output...

讀C Primer 之控制代碼類

我們知道c 中最令人頭疼的當屬指標,如果您申請了物件卻沒有釋放它,時間一長就會造成系統崩潰,大量的記憶體溢位使得您的程式的健壯性出現問題 而控制代碼類就是為了能夠解決這一問題而出現的,控制代碼類有點類似於智慧型指標。好了,廢話不多說,我們來看 首先我們來看 sample.h檔案的 author xi...

理解控制代碼類

在 類的幫助下,我們已經可以實現在乙個容器裡儲存乙個類層次裡所有型別的物件,但是 有乙個很明顯的缺點,就是需要複製物件,當乙個物件非常大或者是一種不能輕易複製的資源的時候,這個實現遇到了很大的困難,於是我們有了控制代碼 handle 類這個技術。我們有這麼乙個類 class point point ...