C 建構函式,析構函式詳解

2022-09-24 17:12:14 字數 2602 閱讀 3907

目錄

上期了解c++類中有public、protected、private三種訪問許可權。

肯定會有人疑惑,c++為什麼要設定這三個許可權呢

本期內容就是圍繞上面的問題展開說明

開始的文章就提到過,類是(oop)物件導向程式設計的基礎

那麼物件導向程式設計究竟是個什麼東東呢

百度百科是這樣解釋的

通俗的來說就是利用**將現實世界的事物抽象出來,使**更具有真實事物的行為

簡單舉個栗子

狗是人類的朋友,有很多人養狗做寵物

寵物狗有名字,年齡,毛髮顏色,等等特徵

狗還會吃飯,喝水,汪汪汪之類的行為

如果利用**抽象乙個小狗類

這些名字,年齡等就對應成員變數

吃飯喝水等行為就是成員函式

上**class dog

void drinking()

void wangwangwang()

};在現實世界中狗的名字我們可以改,但年齡和顏色我們是無法改變的,就比如狗的顏色是它本身dna決定的。我們可以分辨顏色是因為我們視力沒有問題,可以通過看的方式訪問狗的顏色

所以我們通常在**裡將成員變數設定成protected屬性

讓外部無法直接訪問,就像我們無法直接去看狗的dna序列一樣。

所以通常會定義一些成員函式來間接訪問成員變數(這裡上期講解遺漏了,下面補充一下)

protected和private無法在類外訪問,但可以在自己的類內部被成員函式訪問(對外介面)

而將這些成員函式放在public下,在類外使用這些成員函式,就相當於間接訪問無法訪問的變數

這就體現出c++物件導向中封裝的特性

我們看看百度百科中對封裝的介紹

簡單 的說,外部使用乙個封裝好的類的時候只會考慮某些介面的特定功能,而並不會關心內部的具體實現細節。

具體看下圖:

那麼進入主題,看看封裝的具體技術

基本概念:建構函式是類的成員函式,作用是在類建立物件時用於初始化物件。

特點:函式名和類名相同且不用寫返回值,在建立物件時會自動呼叫。

語法:函式名( 形參列表 )

注意:1.建構函式不需要返回值型別

2.建構函式的函式名和類名相同

**如下:

class myclass

myclass()//建構函式 };

void test()

int main()

執行效果:

可見我們只是建立了乙個物件,並沒有對這個物件做任何操作。

我們不用自己呼叫建構函式,編譯器在建立物件時自動呼叫建構函式,為變數初始化。

1.建構函式分類

建構函式大概分無參構造、有參構造、拷貝構造三種

上述**中的建構函式就是乙個典型的無參構造

2.有參建構函式:

例如以下**:(有參構造的3個過載)

myclass(int i)

myclass(int i, char c)

myclass(int i,char c,string str)

3.有參建構函式3個呼叫規則:

括號法:

//使用有參建構函式建立物件 cla2,cla3,cla4

myclass cla2(10);

myclass cla3(10, 'b');

myclass cla4(10, 'b', "str in myclass_cla2");

等號法:

//使用有參建構函式建立物件(等號法)

myclass cla5 = 10;

myclass cla6 = (10, 'b');

直接呼叫建構函式

//使用有參建構函式建立物件(呼叫建構函式)

myclass cla7 = myclass(10);

myclass cla8 = myclass(10, 'b');

myclass cla9 = myclass(10, 'b', "str in myclass");

4.拷貝建構函式

myclass(myclass& cla)

注意:拷貝建構函式的形參是自身型別的引用

拷貝構造函式呼叫

//使用拷貝建構函式建立物件

myclass cla11(cla8);

myclass cla12 = cla9;

5.析構函式

基本概念:在物件被釋放時編譯器會自動呼叫析構函式,用於釋放物件中變數的記憶體空間

語法:函式名( 形參列表 )

注意:1.建構函式不需要返回值型別

2.建構函式的函式名為 ~(類名)

特點:函式名和類名相同且不用寫返回值,在建立物件時會自動呼叫。

有人會問,物件記憶體被釋放時成員變數記憶體空間不是也被釋放了嗎

我們先看一段**

class myclass

};這個myclass類,類成員變數中在記憶體堆區開闢乙個整型變數

堆區記憶體需要手動釋放,不然會造成記憶體洩漏,此時析構函式就派上用處了

以下為析構函式**實現:

~myclass()

由於製作倉促,如有錯誤敬請指正

本期簡單介紹oop物件導向程式設計和建構函式,析構函式。

本文標題: c++:建構函式,析構函式詳解

本文位址: /ruanjian/c/420345.html

C 建構函式,析構函式,拷貝建構函式詳解

二 建構函式的分類及呼叫 三 拷貝構造函式呼叫時機 四 構造函式呼叫規則 五 深拷貝與淺拷貝 六 類物件作為類成員的呼叫規則 七 靜態成員 c 利用建構函式和析構函式進行物件的初始化和清理,這兩個函式將會被編譯器自動呼叫,完成物件初始化和清理工作。物件的初始化和清理工作是編譯器強制要我們做的事情,因...

C 建構函式詳解和析構函式詳解

首先來了解下建構函式的定義 c 建構函式是一種特殊的成員函式,它的作用主要用於為物件分配儲存空間,對資料成員進行初始化。接下來看一下他的語法定義形式 訪問修飾符 識別符號 引數列表 base 引數列表 this 引數列表 解釋 識別符號 就是類名,並且必須是類名。引數列表 就是方法或者函式的引數列表...

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

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