解構函式與建構函式有什麼區別,建構函式和預設建構函式有什麼區別

2021-08-27 12:10:47 字數 1629 閱讀 1693

1樓:雜貨鋪

1、概念不同:

解構函式:物件所在的函式已呼叫完畢時,系統自動執行解構函式。

建構函式:是一種特殊的方法。特別的一個類可以有多個建構函式 ,可根據其引數個數的不同或引數型別的不同來區分它們 即建構函式的過載。

2、作用不同:

解構函式:解構函式被呼叫。

建構函式:為物件成員變數賦初始值

3、目的不同:

解構函式:”清理善後” 的工作

建構函式:主要用來在建立物件時初始化物件, 即為物件成員變數賦初始值,總與new運算子一起使用在建立物件的語句中。

2樓:м▂_寶貝灬

建構函式:

什麼是建構函式?通俗的講,在類中,函式名和類名相同的函式稱為建構函式。它的作用是在建立一個物件時,作某些初始化的工作(例如對資料賦予初值)。

c++允許同名函式,也就允許在一個類中有多個建構函式。如果一個都沒有,編譯器將為該類產生一個預設的建構函式。

建構函式上惟一的語法限制是它不能指定返回型別,甚至void 也不行。

不帶引數的建構函式:一般形式為 類名 物件名()

帶引數的建構函式:不帶引數的建構函式,只能以固定不變的值初始化物件。帶引數建構函式的初始化要靈活的多,通過傳遞給建構函式的引數,可以賦予物件不同的初始值。

一般形式為:建構函式名(形參表);

建立物件使用時:類名 物件名(實參表);

建構函式引數的初始值:建構函式的引數可以有預設值。當定義物件時,如果不給出引數,就自動把相應的預設引數值賦給物件。一般形式為:

建構函式名(引數=預設值,引數=預設值,……);

解構函式:

當一個類的物件離開作用域時,解構函式將被呼叫(系統自動呼叫)。解構函式的名字和類名一樣,不過要在前面加上 ~ 。對一個類來說,只能允許一個解構函式,解構函式不能有引數,並且也沒有返回值。

解構函式的作用是完成一個清理工作,如釋放從堆中分配的記憶體。

一個類中可以有多個建構函式,但解構函式只能有一個。物件被析構的順序,與其建立時的順序相反,即後構造的物件先析構。

建構函式和預設建構函式有什麼區別

3樓:300斤大魚

1、建構函式的函式名稱與類名同名,其他方法(函式)名稱可以自定義。

2、建構函式僅在物件被建立時系統會根據給定的引數以及類中的建構函式定義進行選擇呼叫,如果類中沒有定義建構函式,系統預設會提供一個無參構造空函式,什麼都不會做,只是滿足介面要求,建構函式不能被顯式呼叫。其他函式根據程式設計師需要而呼叫,且必須顯式呼叫。

3、由於物件建立後,系統必須返回新建物件的地址,賦值給指標變數(c++,c#中是將引用賦值給物件變數,其實一樣,內部也是物件地址),那麼換句話說,返回介面被系統佔用了,因此建構函式就不能返回任何型別值,所有帶返回值建構函式的定義編譯器都不會通過。結果就是建構函式沒有也不能有返回型別,而其他函式隨意。

4、由於建構函式的作用只是在建立物件時用來初始化成員變數和物件的,因此建構函式不能被繼承也不能使用介面。換句話說,因為建構函式只在物件建立時會被呼叫,其他情況下永遠不會被呼叫,因此如果對一個類定義一個介面,介面中提供了建構函式的介面的話,該函式介面是永遠無法被顯式呼叫的,顯得多餘了,因此如果為建構函式定義介面,編譯器會報錯。(new一個物件的時候new的是類,不會new介面)

建構函式的呼叫順序,建構函式和解構函式呼叫的順序

構造 塊的作用同樣是給物件進行初始化。物件一建立就執行構造 塊了,而且優先於建構函式執行。這裡要強調一下,有物件建立,才會執行構造 塊,類不能呼叫構造 塊的,而且構造 塊與建構函式的執行順序是前者先於後者執行。構造 塊與建構函式的區別是 構造 塊是給所有物件進行統一初始化,而建構函式是給對應的物件初...

c中解構函式中可以呼叫虛擬函式麼

c 中 析構 函式中不可以呼叫虛擬函式。effective c 中有這樣的描述 同樣的原因也適用於析構過程。一旦派生類解構函式執行,這個物件的派生類資料成員就被視為未定義的值,所以 c 就將它們視為不再存在。c 中派生類在構造時會先呼叫基類的建構函式再呼叫派生類的建構函式,析構時則相反,先呼叫派生類...

關於C中建構函式的繼承的問題,請教c 有參建構函式繼承的問題

1 建構函式不繼承,派生類會自動呼叫基類建構函式。2 若類內沒有定義建構函式,系統會自動隱式生成一個不帶引數的建構函式,比如定義一個類 public class a 可以理解為它已經存在一個如下的建構函式 public class a 3 派生類建構函式自動呼叫基類的不帶引數的建構函式,注意下面的格...