精華區beta NTUE-CS102 關於我們 聯絡資訊
好像半睡不睡第二次課了hmm 上次是動態宣告,這次是結構 下次好像是鏈結串列...(遠目) 好啦,不管怎樣還是下一頁開始... 從動態宣告起,補一下上週內容QQ -- 動態宣告...就動態嘛(毆) 與一般靜態相比,主要差別是動態是在程式執行中才取用記憶體使用 而靜態宣告(int a)則是在程式啟動時從記憶體取得4bytes的記憶體這樣 最主要功能是精簡記憶體使用...在沒記憶體能用時很重要(瞇眼) 使用方式是利用一個指標去儲存new出來的記憶體位址 比如說,要動態宣告一個int變數 就要先形成一個int指標,再new一段記憶體、將位址傳給指標使用 如下面這一小段所示 : 這陣子修改排版習慣,看不習慣不好意思Q #include<iostream> using namespace std; int main(){ int *p; p = new int; delete p; } -- 因為是動態宣告出來的,所以也能夠自由釋放掉這段記憶體空間 就如前頁範例的delete (記憶體位置)這般 要記得的事情是:使用動態宣告請一定要有釋放掉的習慣這樣 其他要注意...因為是個記憶體位址 所以不要做蠢事去覆蓋掉位址記錄就好 像是這樣這段...就是個錯誤範例,第一次new出來的東西就會再也找不到了Q #include<iostream> using namespace std; int main(){ int *p; p = new int; cout << *p <<'\n'; p = new int; cout << *p <<'\n'; delete p; } -- 嗯,動態宣告大概就這樣吧 順便附一下上次小作業code當人生的紀錄 #include<iostream> using namespace std; int main(){ int *p; while (1) p = new int; } 結果是會自己停止,然後有個windows的警告提示 這個警告用cmd跑才看的到這樣...大概就是那個回報/不回報的cmd版本 : 一般int a[n];這種動態宣告在win 這個virtual不吃... : 針對這點我是覺得無所謂啦...反正C99這個新規定都接受了,跟隨時代嘛(毆) 此外,釋放陣列則是 delete a[]; -- 再來是今天不知不覺就說完的結構... 簡易來說,結構就是可以把 一整套東西 包成 一個 包裝 如此就能在宣告時比較容易去處理繁多而使用上互有關聯的變數、處理行為 像是作業這個成績單就是個例子... 一個人名對一份成績,累積一多要分成好幾個陣列宣告就是小小麻煩了點 因此,將針對一個人的所有變數包起來做為一個變數(?)去應用就能簡化行為 繁雜一點的用法我自己以前沒用過,所以大概就先這樣說明... 反正上到哪裡就怎樣說明好了(死) 不管怎樣,下一頁開始是語法與code... -- 結構大概是classstatic兩種,差別是前者預設屬性是private,後者是public 以現在接觸的範圍來說 可以這樣解釋publicprivate... : 當然,這不是個很正確的思考邏輯 public是種全域變數,可以給結構本身以外的東西修改數值 而private是區域變數,只能在結構裏面被修改 算了,用文字說明總覺得很麻煩(想) 一邊寫今日作業一邊說明 要求是有ID、有一項成績就好,所以不想太多應該會寫成 class stu{ int id; int grade; }; 更完整點可能會想像下頁這樣寫 -- #include<iostream> using namespace std; class stu{ int id; int grade; }; int main(){ stu studenta; studenta.id = 36; studenta.grade = 60; } 像這樣去試著指定成績...可是編譯會出現錯誤 因為private "不能" 從結構以外的地方去讀寫 所以在這裡要把id跟grade設為public,才能夠由外部使用... 習慣上是不會把變數設為public,習慣上(飛) -- 也就是把結構的部份改成 class stu{ public: int id; int grade; }; 這樣就能用上頁的作法去使用類別了 嗯...原則上類別的陣列也能像一般宣告方法去做 stu stuedents[38]; 這樣的宣告方式也是可接受的 不過老師不接受,所以就請往上看動態宣告的部份 用同樣的方式去宣告就好 stu *p; p = new stu[38]; -- 最後就是作業題目了...不防雷了 反正這時候應該也都該生出來,前面也寫完類別部份 剩下排序跟傳值...前者泡排不會寫真的該重修-___- 方便起見,不寫陣列...大概說明一下怎樣寫就好 #include<iostream> using namespace std; class stu{ int id; int grade; }; int main(){ stu studenta,studentb; studenta.id = 36; studenta.grade = 60; studentb.id = 40; studentb.grade = 90; } (下頁) -- 兩個替換當然還是要有tmp做傳遞 stu tmp; 傳值大概有兩種 一種是 tmp.id = studenta.id; tmp.grade = studenta.grade; 這種像過去程設的用法...可是既然是結構 就該用更精簡的手段 tmp = studenta; 這樣就能做傳遞了 所以說,如果只是要把上頁a.b做交換 寫法就是下頁這樣.. -- #include<iostream> using namespace std; class stu{ public: int id; int grade; }; int main(){ stu studenta,studentb; studenta.id = 36; studenta.grade = 60; studentb.id = 40; studentb.grade = 90; stu tmp; tmp = studenta; studenta = studentb; studentb = tmp; cout <<studenta.id <<'\t' <<studenta.grade <<'\n'; cout <<studentb.id <<'\t' <<studentb.grade <<'\n'; } -- 有夠難看...硬塞一頁就變得很噁心了 不好意思(飛走) -- 本命 ○楽園の巫女  博麗 霊夢 職業:博麗神社の巫女さん  Hakurei Reimu   能力:主に空を飛ぶ程度の能力 @東方project系列 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 58.114.76.199
j2612280:good!!但還是不得不宣傳一下我的論壇XD~ 03/03 00:09
j2612280:http://307.now.to/ 在國北資科102級那個版裡~XD 03/03 00:10
game0416:(飛踢) 早上跟你提的我跟系辦提了...下學期開始 03/03 00:10
gcobc12632:大家一起重修 03/03 00:11
j2612280:OK!!記得要再提醒我一下><我怕過一個暑假就忘了..感恩~ 03/03 00:12
j2612280:啊= =對了..鳳娘的是詳細版 我的是手寫簡易版~ 03/03 00:13
pk873:翔風DADA置入性行銷 而且又想要跟鳳狼開戰了 03/03 00:14
game0416:到時候應該會記得吧 是說有可能指名幹三年就是了(炸) 03/03 00:14
j2612280:pk不要亂引戰~~~三年.....下學期再說吧~ 03/03 00:15
game0416:沒有問題,你把架構做出來我去坐領乾薪! 03/03 00:18
j2612280:你想太多啦= =+ 03/03 00:19
CaptainWill:推! 但二樓又在宣傳非法論壇了 囧 03/03 00:21
gcobc12632:廣告推文 凼 03/03 00:26
CaptainWill:支持樓上 03/03 00:27
j2612280:靠= =請饒了我... 03/03 00:28
ip3311:推 宣傳非法論壇 幹 你來我寢室開過你論壇? 03/03 00:38
dosomethnig:樓上...哈哈哈 03/03 00:43
※ 編輯: game0416 來自: 120.127.47.86 (03/09 12:02)