close

廢話:用來記錄看這本C++ Primer Plus 5/e的筆記,之前都記在筆記本上,但是發現效果沒有很好(我不太會做筆記),很多細節都沒有辦法詳細的紀錄,再加上自己的字沒有很好看,所以打算用部落格去紀錄,不過...我都看到一半了阿 ,反正我會從一半開始記錄。

 

對了,我不知道把看書的內容跟程式碼寫進去會不會有法律問題?我會盡量用自己的話來表達,如果有興趣的話可以去買(雖然我是去圖書館借的),如果是自學C++第一本書我不太推這本,因為前面的基礎沒有講得很詳細,再來是排版如果是台灣作者指標大概會放在第十章之後,但是這本書第四章就會開始教基礎的指標,所以我覺得初學者太早接觸會有挫折感,所以我推薦初學者可以先從C++教學手冊這類的書開始看(雖然我沒有看過...),反正要自學的話我會推薦買書,當然網路上有很多的內容,但是我覺得如果有書的話就可以有系統式的學習,在網路上找的資料太過於龐大,好的,原本只是想寫筆記不自覺開始在寫日記了..。

 

以上內容只是個人看法。

 

第十一章 類別和動態記憶體配置

 

一般只要宣告了變數給予變數值就會給予記憶體空間儲存直到程式結束。

為什麼要使用動態記憶體?

假設現在在玩吃雞遊戲的有100人,給每個人配置100的記憶體空間儲存人物資訊、武器、狀態等等,那是不是要花100*100 = 10000的記憶體空間去儲存資訊,如果遊戲剛開始就有人落地成盒,是不是就淘汰了,我們不是就不需要淘汰玩家的資訊?就可以把那100的記憶體空間去應用在別的地方,這樣是不是可以有效的利用記憶體去做其他的事。

 

下面我會講解此書的範例,有興趣的人可以想想看這題的結果(想要練打字的也可以來試試),答案會放在下面。

 

11-2~11-7頁

簡單講一下這個範例程式在做什麼,總共會有三個檔案(要放在一起),主要就是使用類別的有參建構函數(construct)動態創建陣列字元,創建的類別變數結束後也會呼叫解構函數(deconstruct),再來就是運算元多型(Operator Overloading (Polymorphism))只要cout特定的參數就會呼叫運算元多型(反正就是呼叫順序的練習)。

(程式碼可能有點小,請見諒)

檔名:string_class.h

1.png

檔名:string_methon.h

2.png

第34行簡單介紹一下,ostream為output stream的簡稱,一般輸出都是使用cout,ostream通常都是用於運算子多型

 

檔名:string_main.cpp

1.png

 

有點詳細但又還好的解說:

第6行呼叫到有參的建構函數所以會輸出,第7、8行稱為函數原型(就是告訴編譯器你有什麼方法),13行為類別的多變數宣告的方法,所以會輸出2行,第18、19行注意會呼叫到運算元多型同時也會輸出(類別裡的str變數),第20行呼叫方法callme1()無參建構函數,當這個方法結束時會把方法裡所的類別變數刪除,第21行宣告了一個指標,指標的內容為callme2()方法的回傳值,而callme2()方法裡又呼叫的有參建構函數,24行刪除掉這個變數所佔的記憶體空間,當25行執行完後,就是執行解構函數(不一定要有,但是只要有類別就一定會執行這個)從後往前開始執行(headlines[1]、headlines[0]、sports)。

 

答案在底下

.

.

.

.

.

.

.

.

旁邊的行數為string_main.cpp輸出的順序(應該沒有錯)。

 

1.png

 

只要你有你有宣告(new)類別變數,當你不需要時可以使用delete刪除,程式結束前也會呼叫delete自動刪除。

 

統整一下解構函數的呼叫時機:

1.宣告在主程式的類別變數,程式結束前會呼叫(若有多個類別變數就會像堆疊(先進後出)一樣的刪除)。

2.在方法裡呼叫,方法結束前會呼叫。

3.自己使用delete 呼叫。

 

 

arrow
arrow
    文章標籤
    c++ 程式 筆記
    全站熱搜
    創作者介紹
    創作者 讀書小天地 的頭像
    讀書小天地

    書籍分享天地

    讀書小天地 發表在 痞客邦 留言(1) 人氣()