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

2021-06-05 09:16:14 字數 1242 閱讀 2145

1、c++中的訪問控制

public,private不用介紹,protected,可以被繼承的結構訪問。

這裡重點一提的是protected是專為繼承而設計的。protected在所屬類的成員函式和在類的外部函式中對類的物件的可見性與private是一樣的——都不可見。而protected只有在繼承時才表現出與private的不一致,即protected在子類中是可見的,而private在子類中是不可見的。

2、友元

friend顯式地允許不屬於當前結構的乙個成員函式訪問我的當前結構中的資料(私有資料,即私有成員也可以訪問)。乙個友元必須在結構內宣告,用以讓程式設計師和編譯器知道這個資料型別的大小,行為等方面的限制。    宣告乙個函式時,引數如果傳遞的是乙個位址,則編譯器知道這是乙個位址,而且有固定大小,而不管傳遞的物件到底是什麼,但是,如果傳遞的是乙個物件,則編譯器必須要知道物件的全部定義以確定它的大小以及如何傳遞。

friend在宣告函式的同時又將它作為struct的友元。即在struct內部進行宣告函式和宣告該結構的友元的一次性解決。

可以在乙個結構體中巢狀的定義另乙個結構體,但是還不能自動地實現裡層結構體訪問外層private成員的許可權。定義是必須要遵循以下規則:首先,宣告乙個巢狀結構,然後將該結構宣告為友元,最後,再給出巢狀結構的定義。

友元函式消除了成員函式呼叫時引數傳入、傳出時的消耗,但是破壞了類的封裝性。

3、類與結構體

乙個使用訪問控制描述符,並將成員函式和成員變數封裝在一起的結構的本質就是乙個類,除了,class中的成員預設為private,而struct中的成員預設為public。而對於控制訪問的描述符只有編譯器知道成員的保護級別,與成員關係的訪問控制資訊並未傳遞給聯結器,所有的訪問控制都是由編譯器來完成的,在執行期間物件就是一塊儲存區域,所以,執行期間不再檢查。

4、減少重複編譯

在我們的編譯環境中,任何檔案的改變無論是.cpp檔案還是標頭檔案,都要進行重新編譯。而若是乙個大專案則會嚴重拖累專案的進度。尤其是在初期,基類的成員常常有所變動,即所謂的「易碎基類「,為了減少這種編譯,引入了控制代碼技術。即在定義某類或者結構時,所有的有關實現的東西都消失了。只剩乙個但指標「smile」.該指標指向乙個結構,該結構的定義以及所有成員函式的實現都同一的出現在實現檔案中。這樣,只要介面程式不改變。都問價就不用改變,而實現部分不用任何修改,實現檔案修改後只需要重新編譯實現檔案,然後重新連線到專案即可。

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

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

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

C 程式設計思想學習筆記 常量

c 程式設計思想學習筆記 常量 一 全域性範圍的const使用 1 const的使用有兩種效果,一是生成編譯期常量,二是執行期常量。做為編譯期常量主要用作值替代,即取代c中的 define常量定義,一般用於設定陣列大小。此時不分配儲存空間,只在有extern限定或取位址時才會分配空間。做為執行期常量...

C 程式設計思想筆記 隱藏實現

友元 如果程式設計師想允許不屬於當前結構的乙個成員函式訪問結構中的資料,可以在類中宣告這個函式為友元。友元必須子啊乙個類中宣告,巢狀友元 乙個巢狀的struct並不能自動地獲得訪問私有成員的許可權,要取得訪問私有成員的許可權,要先宣告乙個巢狀的struct,然後宣告它是全域性範圍使用的乙個友元。友元...