建構函式和析構函式

2021-08-30 22:27:29 字數 316 閱讀 6588

-- 析構函式可以為virtual型別,而建構函式則不能。建構函式為什麼不能為virtual型別呢?

虛函式採用一種虛呼叫的辦法。虛呼叫是一種可以在只有部分資訊的情況下工作的機制,特別允許我們呼叫乙個只知道介面而不知道其準確物件型別的函式。但是如果要建立乙個物件,就必須要知道物件的準確型別,因此建構函式不能為虛函式。

-- 如果虛函式是非常有效的,我們是否可以把每個函式都宣告為虛函式?

不行,這是因為虛函式是有代價的:由於每個虛函式的物件都必須維護乙個v表,因此在使用虛函式的時候都會產生乙個系統開銷。如果僅是乙個很小的類,且不想派生其他的類,那麼根本沒有必要使用虛函式。

建構函式和析構函式

建構函式沒有返回值,不能被顯示的呼叫。它是在定義物件時由系統自動執行的,而且只執行一次。如果沒有定義建構函式,系統會自動生成乙個建構函式,只是這個建構函式的函式體是空,沒有引數,也不執行任何初始化的操作。帶引數的建構函式 有一種簡練,方便的寫法 建構函式的引數初始化表 box int h,int w...

析構函式和建構函式

每個物件生成的時候都要完成物件的初始化,如設定屬性的初始值。c 中規定每個類都有乙個初始值,如果沒有,系統會產生乙個預設的建構函式。這個建構函式沒有任何引數,不做任何額外的工作。但往往我們會自己寫乙個建構函式,用來進行特殊的初始化工作。這樣的話,編譯器就不會再為其生成預設的建構函式。class 類名...

建構函式和析構函式

stock hot 因為資料部分的訪問狀態是私有的,程式不能訪問資料成員。建立stock的建構函式,由於需要為stock提供3個值,因此應為建構函式提供3個引數值,程式設計師可能指向設定company成員,而其他的設定為0 使用預設引數完成 宣告如下 stock const char co,int ...