![]() |
||
|
Regular Member
![]() ![]() 加入日期: Feb 2004
文章: 67
|
最近被所寫的電梯題目困擾.我宣告了兩個class,分別是電梯和按鈕.
那經由main,會建立物件電梯跟物件按鈕.可是當物件按鈕收到指令時, 我該寫下什麼樣的指令,物件按鈕才有辦法與物件電梯溝通,並且告知物件電梯. 要電梯物件更改他private的floor屬性呢? 我想不出來該怎樣讓她們做到"物件與物件溝通"耶... 可有人可以指點個方向呼? |
|||||||
|
|
|
Advance Member
![]() ![]() 加入日期: Jun 2003 您的住址: Taipei
文章: 442
|
除了將所有的東西都變成程式中的物件(將它們設計成類別)之外,你還必須考慮到"物件之間的關係"。
以你的問題為例子,電梯是物件,按鈕也是物件,那它們之間的關係呢?電梯裡面有按鈕(而且不只一個),所以你的電梯物件就會"包含數個按鈕"成員。你可以讓這些按鈕成員的建構子接受一個電梯物件的指標;當按鈕被按下時(例如:按鈕的 "onPress() 方法被呼叫"),就去改變電梯的"floor"屬性(當然了,你的電梯 floor 屬性必須可以修改,或是可以透過成員函式修改)。 這是我想到的作法,參考看看吧。
__________________
現今世道,自爆文當故事書,站長的話做成語錄,幾百年前的文章嘛沒事就挖出來考古...
此文章於 2004-05-17 07:35 PM 被 harrisonlin 編輯. |
||
|
|
|
Regular Member
![]() ![]() 加入日期: Feb 2004
文章: 67
|
引用:
那您的意思,是說電梯class裡面,我除了有電梯的屬性 private: int elevator_floor //電梯樓層屬性 還得在加上"按鈕"的屬性囉? 可是按鈕的部分,我有建立了按鈕的class了. 那我在電梯class裡面,又宣告了按鈕屬性.這樣感覺怪怪的耶... 變成說 電梯class 包含:電梯屬性,按鈕屬性 按鈕class 包含:按鈕屬性 就重複了耶... 還是我哪邊弄錯了呢??? 另外...請問成員是指屬性嗎? 因為我記得類別裡面有兩種東西,就是屬性跟function. 那這樣推過來,成員就是指...屬性囉? |
|
|
|
|
Advance Member
![]() ![]() 加入日期: Jun 2003 您的住址: Taipei
文章: 442
|
代碼:
class FloorButton {
private:
int floor;
string buttonText;
Elevator* pElevator;
public:
FloorButton();
FloorButton(string buttonText, Elevator* pElv, int f);
void press();
};
class Elevator {
private:
int currentFloor;
public:
Elevator();
//假設這棟樓有5層.
FloorButton *pFloorBtn1;
FloorButton *pFloorBtn2;
FloorButton *pFloorBtn3;
FloorButton *pFloorBtn4;
FloorButton *pFloorBtn5;
void setFloor(int n);
int getFloor();
};
這樣瞭了嗎? 在物件導向程式設計中,會常常看到"屬性", "行為", "成員", "成員函式"之類的名詞;"屬性"即是"成員","行為" 即是"成員函式",有時候它們會被混合著使用。在這裡,電梯就具有"目前樓層"和"樓層按鈕"的成員,以及一些"成員函式"像是"前往樓層", "停止"或是"掉落"之類的。而按鈕也是類別,也有自己的屬性(按鈕上的文字和代表的樓層)和行為(按下)等等。 P.S. 這個電梯和按鈕的設計很簡陋,例如一次只能前往一個樓層,不能開關門之類的,而且我覺得我的架構設計得有點糟 - 但是應該可以解釋你的疑點...
__________________
現今世道,自爆文當故事書,站長的話做成語錄,幾百年前的文章嘛沒事就挖出來考古...
此文章於 2004-05-18 11:17 PM 被 harrisonlin 編輯. |
|
|
|
Regular Member
![]() ![]() 加入日期: Feb 2004
文章: 67
|
class FloorButton {
private: int floor; string buttonText; Elevator* pElevator; 以上恕刪一部分~ 可以請教一下,Elevator* pElevator的哪種型態的指標嗎? 以及他的功用. 因為課本上只看過int* 以及 char* . 您的Elevator* pElevator,我看不懂><" 順便可以請教一下,在C++檔案裡面,XXX.h跟XXX.cpp的差別嗎? 因為老師去台北開會了,全宿舍又只有我在寫程式...一一" 實在是求教無門...並不是我偷懶,不想去問老師. |
|
|
|
Advance Member
![]() ![]() 加入日期: Jun 2003 您的住址: Taipei
文章: 442
|
引用:
Elevator* pElevator, 這是指我的 Button class 裡有一個成員是"指向 Elevator 物件"的指標。當一個 button 被按下時,它會使用這個指標去改變 Elevator 的某些值。 引用:
我想你應該先找一本 C/C++ 的書好好地 K 一 K...
__________________
現今世道,自爆文當故事書,站長的話做成語錄,幾百年前的文章嘛沒事就挖出來考古...
|
||
|
|
|
Regular Member
![]() ![]() 加入日期: Feb 2004
文章: 67
|
可以請問一下這些問題嗎?
可以請問一下,關於這些C++的問題提示嗎?
只po問題提示,因為我怕程式一起po上來,會很亂~"~a 而且的話,我一po上來,所有的縮排就都不見了. --------------------Configuration: 電梯主程式 - Win32 Debug-------------------- Compiling... 電梯主程式.cpp E:\課本作業\電梯主程式.cpp(33) : warning C4183: 'show_elevator_floor': member function definition looks like a ctor, but name does not match enclosing class E:\課本作業\電梯主程式.cpp(38) : warning C4183: 'show_elevator_status': member function definition looks like a ctor, but name does not match enclosing class E:\課本作業\電梯主程式.cpp(29) : error C2440: '=' : cannot convert from 'char *' to 'char' This conversion requires a reinterpret_cast, a C-style cast or function-style cast E:\課本作業\電梯主程式.cpp(29) : error C2143: syntax error : missing ';' before '}' E:\課本作業\電梯主程式.cpp(58) : warning C4183: 'add_sub_user': member function definition looks like a ctor, but name does not match enclosing class E:\課本作業\電梯主程式.cpp(62) : warning C4183: 'show_user_amount': member function definition looks like a ctor, but name does not match enclosing class E:\課本作業\電梯主程式.cpp(84) : warning C4183: 'get_keyin': member function definition looks like a ctor, but name does not match enclosing class E:\課本作業\電梯主程式.cpp(95) : warning C4183: 'show_button_list': member function definition looks like a ctor, but name does not match enclosing class E:\課本作業\電梯主程式.cpp(143) : warning C4183: 'show_click_button': member function definition looks like a ctor, but name does not match enclosing class E:\課本作業\電梯主程式.cpp(154) : warning C4551: function call missing argument list E:\課本作業\電梯主程式.cpp(155) : warning C4551: function call missing argument list E:\課本作業\電梯主程式.cpp(156) : warning C4551: function call missing argument list E:\課本作業\電梯主程式.cpp(158) : error C2660: 'get_keyin' : function does not take 1 parameters E:\課本作業\電梯主程式.cpp(159) : error C2660: 'show_click_button' : function does not take 0 parameters E:\課本作業\電梯主程式.cpp(161) : warning C4508: 'main' : function should return a value; 'void' return type assumed Error executing cl.exe. 電梯主程式.obj - 4 error(s), 11 warning(s) |
|
|