C 類的建構函式與析構函式

2021-08-19 03:38:02 字數 1678 閱讀 3077

前言序錦:

很開深也很受教的一次c++學習,今天在圖書館自習,女票說要拿一道c++的題來考考我,說這道題頗有難度,當時的我是很激動的,畢竟作為程式猿來說,就相當於獵人嗅到了食物的味道一樣o(∩_∩)o哈哈~,好了話不多說,直接來上題目吧……

正文:

題目:

calss a

~a()}

a* p;

};老鐵們,請先不要繼續往下看,先來自己品嚐一下這道題吧,看你能不能很快oj她!!!

分析:

看了這道題,我們可以朝著兩個方向去尋找答案,「建構函式」和「析構函式」

1,建構函式方面:

由於a類中有乙個指標a* p;

而建構函式 a()

也就是說整個指標指向了物件本身,

修改為:`a(),`

在實際的程式中,可以將p指向別的物件,比如結構體中的next物件一樣。

2,析構函式方面:

首先我們來看一下delete p,

這一句的操作就是讓我們來手動釋放掉p物件,

而我們又是將其定義在析構函式中,

則會出現,物件本來已經通過析構函式被析構掉了,

然後此處再次呼叫delete,

此時又會再次去進行析構,而析構的都是同乙個物件,

這樣就會形成無限遞迴呼叫析構函式,導致錯誤。

對就是這麼「簡單」的一道題,卻隱含了這麼多的知識,真的是讓人感慨呀,當年學的c++感覺全都還給老師了呀,今天真的很感謝女票^-^給我這麼個機會來好好腦補一下c++知識,下面我們還是來詳細了解一下c++中的

this指標:

我首先看的是建構函式,a(),好奇特的建構函式,為什麼什麼都沒有,第一句一開始就出現了乙個變數p,還等於this,為了這一點,還專門去看一下this:

c++中的this:

1,對於上面的p = this,意思就是對於p的this就是p的this指標,如果有成員函式呼叫,比如說a.sum(),則sum函式可以通過**形參this來訪問a,所以this是被呼叫物件訪問呼叫他的物件的工具,可以理解為this指向呼叫他的物件;

2,預設情況下,this的型別是指向類型別非常量的常量指標,所以預設情況下,進行初始化時,我們不能把this繫結到乙個常量物件上去。

3,this指標是類成員函式的第乙個預設隱含引數,編譯器自動維護傳遞,類編寫者不能顯示傳遞;

4,只有在類的非靜態成員函式中才可以使用this指標,其他任何函式中都不可以。

3,this指標時刻指向物件,在成員函式的開始執行前構造,在成員的執行結束後清除。

課後習題1:

寫出類a的定義,通過類的靜態成員來記錄已經建立的a類的例項(物件)的個數,使得下面的程式

int main()

得到的輸出為:

there are 10 objects

there are 0 objects

比較簡單但是很有代表性的一道題,歡迎各位夥伴們(^▽^)oj,可以將你們的結果或者問題留下,我們一起學習……

課後習題1答案:

C 類建構函式 析構函式

類的建構函式是類的一種特殊的成員函式,它會在每次建立類的新物件時執行。建構函式的名稱與類的名稱是完全相同的,並且不會返回任何型別,也不會返回 void。建構函式可用於為某些成員變數設定初始值。下面的例項有助於更好地理解建構函式的概念 include using namespace std class...

C 類建構函式 析構函式

類的建構函式是類的一種特殊的成員函式,它會在每次建立類的新物件時執行。建構函式的名稱與類的名稱是完全相同的,並且不會返回任何型別,也不會返回 void。建構函式可用於為某些成員變數設定初始值。下面的例項有助於更好地理解建構函式的概念 include using namespace std class...

C 類建構函式 析構函式

類的建構函式是類的一種特殊的成員函式,它會在每次建立類的新物件時執行。建構函式的名稱與類的名稱是完全相同的,並且不會返回任何型別,也不會返回 void。建構函式可用於為某些成員變數設定初始值。下面的例項有助於更好地理解建構函式的概念 include using namespace std class...