![]() |
PCDVD數位科技討論區
(https://www.pcdvd.com.tw/index.php)
- 疑難雜症區
(https://www.pcdvd.com.tw/forumdisplay.php?f=34)
- - 可以請問一下這程式的問題在哪嗎?
(https://www.pcdvd.com.tw/showthread.php?t=341504)
|
|---|
回覆: 回覆: 回覆: 回覆: 回覆: 回覆: 可以請問一下這程式的問題在哪嗎?
本來是想把上面的文章重新編輯的,可是伺服器不給我改~"~a...
只好重新另外po了 以下是我的程式碼↓ 這是我宣告的一個物件. 首先我宣告了兩個字串陣列button_list和button_action. 再來呢,我在她的function定義了get_outside_button_list 此function是要印出button_list的第六跟第七字串. 可是每次印出的卻都是亂碼... 翻過課本也問過同學了,但是感覺上我看的課本對字串陣列的說明都很少.有一本甚至根本沒教怎麼宣告字串陣列. 其中一本的範例是 char string[4][20]= { {"abc"}, {"def"}, {"ghi"}, {"jkl"} }; 而當她cout<<string[3]<<endl;的時候,他的確可以印出jkl. 我的程式碼也跟她一樣(起碼在我看來是一樣...) 可是我的卻是亂碼,實在是令我頭大~"~a... ==================================================== 代碼:
class button_class
{
char button_list[7][20];
char button_action[7][20];
public:
button_class()//建構
{
char button_list[7][20]=
{
{"1F"}, //0
{"2F"}, //1
{"3F"}, //2
{"開門"}, //3
{"關門"}, //4
{"往上"}, //5
{"往下"} //6
};
char button_action[7][20]=
{
{"按下1F按鈕"}, //0
{"按下2F按鈕"}, //1
{"按下3F按鈕"}, //2
{"按下開門按鈕"}, //3
{"按下關門按鈕"}, //4
{"按下往上按鈕"}, //5
{"按下往下按鈕"} //6
};
}//建構結束
void get_outside_button_list()
{
cout<<button_list[5]<<button_list[6]<<endl;
}
};
===================================================== |
回覆: 回覆: 回覆: 回覆: 回覆: 回覆: 回覆: 可以請問一下這程式的問題在哪嗎?
嗯•••不知道您們教過變數的 scope(中文怎麼說?範圍?生命期?) 了沒?
先看一下以下的程式碼,注意到:x() 與 main() 都有「int a;」的宣告。 代碼:
void x() {
int a;
a=1;
cout << a; // a 是 x() 的區域變數(==1)。
}
main() {
int a;
a=0;
cout << a; // a 是 main() 的區域變數 (==0)。
}
如果您同意上面出現在 main() 跟 x() 裡的 a 是不同變數的話, 那就可以很清楚的看到,在下面您的程式裡•兩個黃色顯示的 button_list 是不同的變數 (同樣的狀況也發生在 button_action)。 代碼:
class button_class
{
char button_list[7][20];
char button_action[7][20];
public:
button_class()//建構
{
char button_list[7][20]=
{
{"1F"}, //0
{"2F"}, //1
{"3F"}, //2
{"開門"}, //3
{"關門"}, //4
{"往上"}, //5
{"往下"} //6
};
char button_action[7][20]=
{
{"按下1F按鈕"}, //0
{"按下2F按鈕"}, //1
{"按下3F按鈕"}, //2
{"按下開門按鈕"}, //3
{"按下關門按鈕"}, //4
{"按下往上按鈕"}, //5
{"按下往下按鈕"} //6
};
}//建構結束
void get_outside_button_list()
{
cout<<button_list[5]<<button_list[6]<<endl;
}
};
所以呢?您先想想好了••, 註1: 如果可以在宣告成員變數的時候同時設定值,就不需要在建構式做這些事了。 不過,您之前提到成員變數不能在宣告的時候同時設定值 (太久沒用,不大清楚), 如果真是這樣的話,只好在建構式作值的設定。 但要設定二維陣列的值,好像沒有簡單的、內建的指令或函數, 也許您就只能使用類似於 harrisonlin 提到的方法了。 如果這個變數可以給同一個類別的所有物件共用的話, 您也可以使用靜態成員變數,那就可以在宣告的時候設定初值了。 (使用全域變數當然也可以達到相同效果,不過有違封裝原則) 註2: 另一個問題很難答,如果要仿效現實生活中的狀況••• 先想一下,使用者需不需要知道電梯目前在幾樓 → 不需要。 (所以電梯目前的所在樓層設為 private 有點道理) 但電梯系統需不需要知道幾樓有人按鈕了 → 需要。 (所以?嗯•••我想清楚再說吧•••) edited: 也許,可以替電梯系統加一個 public 成員函數 invite(int f, int up_down), 使用者類別加上 up()/down() 兩個 public 成員函數表示使用者要上或下。 當 user.up() 或 user.down() 被呼叫時,即以本身“所在樓層”及“往上或往下”當參數,執行 elevator_invite(x,x)••• 也有想過更複雜的方式,另外設定樓層類別 floor,並建立三個物件 f[0], f[1], f[2] 分別表示 1-3 樓, 樓層物件有 public 成員函數 up()/down() 供使用者呼叫,當 f[1].up() 被執行的時候,便會•••如此就不需要使用者設定個 public 成員函數•••。 可能會更貼近現實生活的狀況,不過好像太複雜了。 |
| 所有的時間均為GMT +8。 現在的時間是02:47 PM. |
vBulletin Version 3.0.1
powered_by_vbulletin 2026。