瀏覽單個文章
8:5
Major Member
 

加入日期: Dec 2002
您的住址: 謎
文章: 265
回覆: 回覆: 回覆: 回覆: 回覆: 回覆: 回覆: 可以請問一下這程式的問題在哪嗎?

嗯•••不知道您們教過變數的 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 成員函數•••。
可能會更貼近現實生活的狀況,不過好像太複雜了。
 
舊 2004-06-05, 03:19 PM #12
回應時引用此文章
8:5離線中