作者game0416 (鳳狼)
看板NTUE-CS102
標題Re: [閒聊] 程設作業
時間Wed Mar 3 00:07:29 2010
好像半睡不睡第二次課了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...
--
結構大概是
class跟
static兩種,差別是前者預設屬性是
private,後者是
public
以現在接觸的範圍來說
可以這樣解釋
public跟
private...
: 當然,這不是個很正確的思考邏輯
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
→ 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)