C 學習 構造 析構函式

2021-04-12 19:05:08 字數 3018 閱讀 3067

.建構函式

何時呼叫建構函式:

class1 cl=new class1();

new運算子為物件分配記憶體,然後再呼叫物件的建構函式。 1.

建構函式:無返回值

與類同名,可以過載,在生成類的例項時呼叫,可以初始化字段,當然也可以加入**獲取目前生成的例項數

class mode

} 2.靜態建構函式:初始化靜態成員變數

class mode

static

mode() //

可以無型別修飾符,只在類載入時呼叫一次

} 2. const 

和readonly 字段

1)const 

隱式靜態,必須

/只能在宣告時賦初值,每個類只有乙個拷貝

public const uint ex=10;

public static const uint ex=10; //錯誤

2)readonly 

字段更加靈活, 1

)可以在建構函式中賦初值,可以是例項字段,

和字段類似,不過在建構函式外不能更改值 2

)如果要把

readonly

設定為靜態,就必須顯式宣告

public static readonly uint ex=10; //正確

4 從其他建構函式中呼叫建構函式(利用方法的過載)

class mode

public mode(int a) //

可以無型別修飾符,只在類載入時呼叫一次

} 5 派生類的建構函式

建構函式的呼叫順序是先呼叫

system.object ,

再按照層次結構由上向下進行,直到到達要例項化的類為止。還要注意在這個過程中,每個建構函式都初始化它自己類中的字段。(可見,若有派生類建構函式不能宣告為

private)

在類中定義有參建構函式可以強制使用者初始化字段

(而不是由系統設為空)

派生類預設呼叫其基類的無參建構函式。若其基類無無參建構函式(即顯式定義了有參建構函式),則需要在派生類的建構函式中顯式呼叫其基類的有參建構函式。

class base

} class mode

:base

} 析構函式

清理:析構函式(c++開發人員擴充套件了析構函式的用法,不僅用於清理資源,還提供除錯資訊)

c#中由無用儲存單元收集系統清理資源,不能預計析構函式會在什麼時候執行,一般情況下不鼓勵使用。

但在幾種情況下使用:當刪除變數時,需要採取一些措施(例如檔案、資料庫的閉合連線:是否無用儲存單元收集系統無法處理,無用儲存單元收集系統只是清理記憶體不用的

/

超過作用域的物件、變數。而檔案、資料庫是不由。

net

管理的資源。在作業系統中還保持連線狀態

1) 200

頁finalize()

方法:傳統意義的析構函式(工作方式:由無用儲存單元收集系統在檢測到例項已不再被引用時,就隱式呼叫

finalize()

方法(客戶程式無法控制) )

但finalize()

方法缺乏確定性和對無用儲存單元收集器效能的影響。所以應使用

dispose()

和close()方法

2) 200

頁dispose()

和close()方法

很大程度上是一種約定,不是

c#語言的一部分,但對於

dispose()

方法,在

c#中有一些內部支援。

工作方式:應該明白任何客戶機**都應顯式呼叫這個方法,來釋放資源。

優點:資源在不需要時立即被釋放,這對於象獨佔檔案鎖那樣的物件來說是非常好的

缺點:客戶機**必須正常工作,並且呼叫該方法,如果不是這樣,就被捆在這裡

dispose()

和close()

方法之間的區別大體上是乙個約定:

close()

:主要用於指定資源可能以後會再次開啟。適合於關閉檔案、資料庫的連線

dispose()

:是一種最終處理,呼叫

dispose()

意味著客戶機**最終會刪除這個物件。適合於釋放各種

gdi或其他

windows

物件的控制代碼,

詳細202如果要利用

idisposable

結構,也可以自動

dispose()

,即通過

using

關鍵字。

總結:可見對於存在檔案、資料庫、

gdi

或其他

windows

物件的控制代碼是不由。

net

管理的資源,在物件銷毀後,要

顯式呼叫這個dispose()方法。或close()不需要重寫析構函式)

C 建構函式 析構函式 虛析構函式

一般地,建立物件和刪除物件時,父類建構函式 子類建構函式 子類析構函式 父類析構函式。特例 如果用new建立了乙個物件,並將父類的指標指向這個子類的物件,那麼用delete撤銷物件時,系統只執行基類的析構函式,而不執行派生類的析構函式。如果希望按照子類析構函式 父類析構函式的順序執行,那麼應該將基類...

C 構造 析構函式

建構函式 與普通函式相比有三點不同。和定義的結構體 類名字完全一樣。沒有返回值。呼叫的時機 建立乙個物件的時候,對結構體內的物件賦值,初始化用的。而成員函式print 是建立完物件再呼叫。建構函式不是必須有的,但是一旦定義了建構函式,在建立物件的時候必須要用,否則報錯。如果即想有建構函式,建立物件的...

C 建構函式,析構函式

一 建構函式 在建立類的物件時自動呼叫的乙個函式,主要是為物件本身做初始化工作 沒有返回值,名字和類的名字相同,因為是在建立物件時候自動呼叫的,所以必須型別為public的,可以帶引數,可以有多個 如果類中沒有建構函式,在下面三種情況下,會自動的新增預設的建構函式 1.如果類中有虛函式,或者類中有虛...