標籤:目標 解構函式 lin public strong 封裝 初始化 new 需要
C+ +語言支援“分別編譯”(separate compilation)。也就是說,一個程式所有的內容,可以分成不同的部分分別放在不同的.cpp檔案裡。cpp檔案裡的東西都是相對獨立的,在編譯(compile)時不需要與其他檔案互連,只需要在編譯成目標檔案後再與其他的目標檔案做一次連結(link)就行了。
應該記住的一點就是,.h標頭檔中,只能存在變數或者函數的聲明, 而不要放定義。即,只能在標頭檔中寫形如:extern int a;和void f();的句子。這些才是聲明。如果寫上int a;或者void f() {}這樣的句子,那麼一旦這個標頭檔被兩個或兩個以上的.cpp檔案包含的話,編譯器會立馬報錯。
複習一些c++編程內容
資料的封裝:物件導向的指導思想就是以對象為中心,就是要以誰做什麼來表達程式的邏輯,要將資料的操作都轉化為成員函數的調用。 也就是說,對象在程式中的所有操作,都通過調用自己的函數來完成。
資料封裝的好處:可以對傳入的參數加入條件限制。也可以限制某些資料唯讀不寫。
內嵌函式:利用關鍵字inline定義,在編譯時間,直接將函數體代碼和實參代替函數調用語句。類似於直接插入指令碼。(結構和邏輯都時比較簡單的)
類內定義:在定義一個類的時候,如果將成員函數的函數體,寫在類的內部,這樣就稱為類內定義。(類內定義的成員函數,編譯器會優先將其編譯成內嵌函式)
類外定義:成員函數的函數體,寫在類的外面。分別為同檔案類外定義(成員函數雖然定義在類的外面,但和類的定義在同一個檔案當中)和分檔案類外定義(大型項目和專業程式員都會採用這種定義方式)。在標頭檔中,定義了類並且聲明類的成員函數,在分檔案當中定義類的成員函數。必須將標頭檔包含入分檔案中。
記憶體分區:
棧區:所定義的變數就儲存在棧區。其特點是記憶體又系統來進行控制,無論是分配還是回收,都不需要程式員來關心。
堆區:是用new來分配的記憶體,這是需要程式員自己來回收的。
全域區:用來儲存全域變數和靜態變數。
常量區:儲存一些字串和常量。
代碼區:儲存編譯之後的代碼。
對象的初始化:分為兩種(1)有且僅有一次的初始化(2)根據條件初始化
建構函式:用來初始化。將初始化代碼寫在建構函式內,就可以起到初始化的作用,建構函式在對象執行個體化時被自動調用(被調用,且僅被調用一次)。初始化函數要與類同名,且建構函式沒有傳回值,不用寫void。在執行個體化對象時,不需要傳遞參數的建構函式稱為預設建構函式。
初始化列表:在建構函式中是用,例如
clas Student {public: Student():m_strName("Jim"),m_iAge(10){}private: string m_strName; int m_iAge;};
初始化列表特性:(1)初始化列表先於建構函式執行(2)初始化列表只能用於建構函式(3)初始化列表可以同時初始化多個資料成員。
初始化列表的必要性:比如某一個const常量,如何去給其賦值呢,就需要用到初始化列表了。
拷貝建構函式:通過同類型的對象執行個體化另外的對象時,自動調用拷貝建構函式。當沒有自訂拷貝建構函式的時候,系統會自動產生一個拷貝建構函式。
解構函式:用于歸還系統資源,收拾最後的殘局。釋放掉所佔用的記憶體。解構函式不允許傳遞參數,也就不允許重載。
解構函式:如果沒有自訂解構函式,則系統自動產生一個解構函式。在對象銷毀時自動調用。
標頭檔中角括弧<>和雙引號“”的區別:
<>角括弧是從預設庫中搜尋;而“”雙引號是從當前檔案目錄下搜素。
C++調試