Re: [課業] 程設作業
最後只剩下一個問題
3. 這個stack可以由使用者決定大小
我們前面寫的stack都是固定size,因為array長度是固定的。
所以要執行時才決定array size,就要用動態分配記憶體。
class myStack{
private:
int* data; //把data欄位改成pointer
int size //同時用size來紀錄array大小
int top;
public:
int pop();
void push(int e);
myStack();
};
//這個跟class同名的函數叫Constructor(建構者? 中文怪怪的)
//顧名思義,當一個class誕生,系統就會自動呼叫這個函式
myStack::myStack(){
//Constructor通常用來初始化class裡的變數
top=-1;
cout << "請輸入您希望的stack的大小:";
cin >> size;
data = new int[size]; //動態分配
}
改成動態分配array大小後,
前面幾篇的push,pop的陣列邊界檢查,也要記得從99改成size喔
到此為止,myStack的模子應該是完成了。
====================================
int main(){
myStack gogo; // 實際生產出一個myStack,名字叫gogo。
gogo.push(1); //自己跑跑看吧
gogo.push(99);
cout << gogo.pop() << endl;
...
}
=====================================
把程式碼包成class有相當多好處。
從使用者的觀點來看,
只需要知道gogo.push()跟gogo.pop(),其他一概不知,也可以使用愉快。
(例如我自己寫的code,常常寫完幾個月後內容都忘光了,依舊可以拿出來再利用=.=+)
從程式設計師的觀點來看,
class的可移植性很高,不管貼到哪都能跑。
而且寫大型軟體時,一次只需專注在一個問題上,最後再合併多個class的功能即可。
到此為止,應該有感受到一點點物件導向的好處了吧?
對了,寫完後記得把這份stack保留下來,以後(~大四)可能有很多機會用到:)
--
懷著一顆對這個家有無限關愛的心,我 再度流浪到遠方。 --<舒伯特>
這些年來,我唱著歌,唱出愛,可是它對我來說卻是痛苦;
我唱出痛苦,可是它對我來說又是愛。 愛與痛苦就這樣分割著我。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 203.68.15.109
推
03/25 18:47, , 1F
03/25 18:47, 1F
推
03/25 20:42, , 2F
03/25 20:42, 2F
推
03/25 20:48, , 3F
03/25 20:48, 3F
推
03/25 22:16, , 4F
03/25 22:16, 4F
推
03/25 22:54, , 5F
03/25 22:54, 5F
※ 編輯: chchwy 來自: 203.68.15.230 (03/26 08:19)
討論串 (同標題文章)