C 程式設計思想學習 初始化與清除

2021-06-05 09:34:28 字數 1085 閱讀 8920

1、構造與析構函式

c++中為了確保物件能夠在使用之前初始化,再離開物件的作用域(同變數的作用域範圍是一樣的)時確保清楚它,c++的物件中新增了構造和析構函式用於實現上面的功能。構造和析構函式,由編譯器負責將建構函式的呼叫**插入到物件建立語句緊挨著的後面,而在程式離開物件的作用域時編譯器負責將析構函式的呼叫**插入到作用域範圍的最後一條語句之後。這樣在程式真正的執行時,就保證了,每個物件在建立的時候已初始化,在物件離開作用域之後進行了清楚工作。

由於編譯器不能處理返回值,所以,析構函式和建構函式不可以有返回值。但是,建構函式可以帶引數,而析構函式沒有必要帶引數。析構函式呼叫的唯一憑證就是作用域的右括號,只要程式執行指標離開這一作用域馬上呼叫析構函式。

2、變數的定義與用

c++允許在任何滴放定義變數。這樣程式設計師可以在使用時才定義需要的變數,同時將變數初始化。這樣可以防止變數未初始化就使用,同時,大大增加了程式的可閱讀性。

3、集合的初始化

c++中可以在集合(可以是陣列、類、結構體)定義的時候,用在{}中指定初始值的方式,來初始化集合。但是結構體以及類中,建構函式是同過的正式介面來強制初始化的,所以,建構函式必須通過被呼叫來進行初始化。如下:(類中也是一樣的)

struct x

定義以及初始化為:y y1=;只要有了建構函式無論是結構體還是類。所有的成員無論是公共的還是乙個帶私有成員的class,所有的初始化工作都必須通過建構函式來進行。如上面的結構體,上面結構體的初始化,只是對建構函式進行了呼叫,而所有的初始化工作都有建構函式進行。而初始化時能指定的值只能是構造函式引數列表所匹配的引數。如上面如果建構函式只對int i進行了初始化,而未對int j 初始化則通過上面方式的定義結構體變數int j 是未初始化的,這是危險的。預設建構函式用於當想建立乙個物件而又不知道任何細節時。當且僅當乙個結構中沒有建構函式時,編譯器會自動地為它建立乙個預設的建構函式(以後結構不專指結構體,而是結構體或者是類)。但是,由編譯器自動建立的建構函式,只是做一些將內從初始化的操作。所以,編寫程式時最好把它當做一種安全網。如果可以,盡量編寫自己的建構函式。 

此文只為個人學習c++程式設計思想時個人心得體會,所以,難免有不嚴謹之處,甚至有可能是錯誤的理解。如發現錯誤,或者疑問。歡迎提出討論,共同學習、進步

c 的初始化與清除

第4章 初始化與清除 第2章利用了一些分散的典型c語言庫的構件,並把它們封裝在乙個struct總,從而在庫的應用方面做了有意義的改進 從現在起,這個抽象資料型別稱為類 1 這樣用類名隱藏了類內部的函式名,並且通過設立處理界限,意味著資料型別的內部機制對設計者來說是可控的和能自行處理的。封裝和實現的隱...

C 程式設計思想學習 資料抽象

1 動態記憶體分配 c 使用關鍵字new動態分配記憶體。一般表示式為 new type 如,new unsigned char bytes type也可以是結構體或者類名 用new分配的記憶體必須用delete來釋放。如果,多次申請但是不釋放則到達一定程度,記憶體耗盡,會發生記憶體洩露。釋放時也要注...

C 程式設計思想學習 隱藏實現

1 c 中的訪問控制 public,private不用介紹,protected,可以被繼承的結構訪問。這裡重點一提的是protected是專為繼承而設計的。protected在所屬類的成員函式和在類的外部函式中對類的物件的可見性與private是一樣的 都不可見。而protected只有在繼承時才表...