PCDVD數位科技討論區
PCDVD數位科技討論區   註冊 常見問題 標記討論區為已讀

回到   PCDVD數位科技討論區 > 其他群組 > 疑難雜症區
帳戶
密碼
 

回應
 
主題工具
poenxu
Regular Member
 
poenxu的大頭照
 

加入日期: Feb 2004
文章: 67
Unhappy 關於C++的物件...

最近被所寫的電梯題目困擾.我宣告了兩個class,分別是電梯和按鈕.
那經由main,會建立物件電梯跟物件按鈕.可是當物件按鈕收到指令時,
我該寫下什麼樣的指令,物件按鈕才有辦法與物件電梯溝通,並且告知物件電梯.
要電梯物件更改他private的floor屬性呢?
我想不出來該怎樣讓她們做到"物件與物件溝通"耶...
可有人可以指點個方向呼?
     
      
舊 2004-05-17, 05:25 PM #1
回應時引用此文章
poenxu離線中  
harrisonlin
Advance Member
 
harrisonlin的大頭照
 

加入日期: Jun 2003
您的住址: Taipei
文章: 442
除了將所有的東西都變成程式中的物件(將它們設計成類別)之外,你還必須考慮到"物件之間的關係"。

以你的問題為例子,電梯是物件,按鈕也是物件,那它們之間的關係呢?電梯裡面有按鈕(而且不只一個),所以你的電梯物件就會"包含數個按鈕"成員。你可以讓這些按鈕成員的建構子接受一個電梯物件的指標;當按鈕被按下時(例如:按鈕的 "onPress() 方法被呼叫"),就去改變電梯的"floor"屬性(當然了,你的電梯 floor 屬性必須可以修改,或是可以透過成員函式修改)。

這是我想到的作法,參考看看吧。
 
__________________
現今世道,自爆文當故事書,站長的話做成語錄,幾百年前的文章嘛沒事就挖出來考古...

此文章於 2004-05-17 07:35 PM 被 harrisonlin 編輯.
舊 2004-05-17, 07:23 PM #2
回應時引用此文章
harrisonlin離線中  
poenxu
Regular Member
 
poenxu的大頭照
 

加入日期: Feb 2004
文章: 67
Unhappy

引用:
Originally posted by harrisonlin
除了將所有的東西都變成程式中的物件(將它們設計成類別)之外,你還必須考慮到"物件之間的關係"。

以你的問題為例子,電梯是物件,按鈕也是物件,那它們之間的關係呢?電梯裡面有按鈕(而且不只一個),所以你的電梯物件就會"包含數個按鈕"成員。你可以讓這些按鈕成員的建構子接受一個電梯物件的指標;當按鈕被按下時(例如:按鈕的 "onPress() 方法被呼叫"),就去改變電梯的"floor"屬性(當然了,你的電梯 floor 屬性必須可以修改,或是可以透過成員函式修改)。

這是我想到的作法,參考看看吧。


那您的意思,是說電梯class裡面,我除了有電梯的屬性
private:
int elevator_floor //電梯樓層屬性
還得在加上"按鈕"的屬性囉?
可是按鈕的部分,我有建立了按鈕的class了.
那我在電梯class裡面,又宣告了按鈕屬性.這樣感覺怪怪的耶...
變成說
電梯class 包含:電梯屬性,按鈕屬性
按鈕class 包含:按鈕屬性
就重複了耶...
還是我哪邊弄錯了呢???

另外...請問成員是指屬性嗎?
因為我記得類別裡面有兩種東西,就是屬性跟function.
那這樣推過來,成員就是指...屬性囉?
舊 2004-05-18, 08:40 PM #3
回應時引用此文章
poenxu離線中  
harrisonlin
Advance Member
 
harrisonlin的大頭照
 

加入日期: 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 編輯.
舊 2004-05-18, 11:08 PM #4
回應時引用此文章
harrisonlin離線中  
poenxu
Regular Member
 
poenxu的大頭照
 

加入日期: Feb 2004
文章: 67
class FloorButton {
private:
int floor;
string buttonText;
Elevator* pElevator;

以上恕刪一部分~

可以請教一下,Elevator* pElevator的哪種型態的指標嗎?
以及他的功用.
因為課本上只看過int* 以及 char* .
您的Elevator* pElevator,我看不懂><"

順便可以請教一下,在C++檔案裡面,XXX.h跟XXX.cpp的差別嗎?
因為老師去台北開會了,全宿舍又只有我在寫程式...一一"
實在是求教無門...並不是我偷懶,不想去問老師.
舊 2004-05-21, 12:47 PM #5
回應時引用此文章
poenxu離線中  
harrisonlin
Advance Member
 
harrisonlin的大頭照
 

加入日期: Jun 2003
您的住址: Taipei
文章: 442
引用:
Originally posted by poenxu
可以請教一下,Elevator* pElevator的哪種型態的指標嗎?


Elevator* pElevator, 這是指我的 Button class 裡有一個成員是"指向 Elevator 物件"的指標。當一個 button 被按下時,它會使用這個指標去改變 Elevator 的某些值。

引用:
Originally posted by poenxu
順便可以請教一下,在C++檔案裡面,XXX.h跟XXX.cpp的差別嗎?


我想你應該先找一本 C/C++ 的書好好地 K 一 K...
__________________
現今世道,自爆文當故事書,站長的話做成語錄,幾百年前的文章嘛沒事就挖出來考古...
舊 2004-05-21, 06:46 PM #6
回應時引用此文章
harrisonlin離線中  
poenxu
Regular Member
 
poenxu的大頭照
 

加入日期: 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)
舊 2004-05-25, 06:03 PM #7
回應時引用此文章
poenxu離線中  


回應


POPIN
主題工具

發表文章規則
不可以發起新主題
不可以回應主題
不可以上傳附加檔案
不可以編輯您的文章

vB 代碼打開
[IMG]代碼打開
HTML代碼關閉



所有的時間均為GMT +8。 現在的時間是08:46 PM.


vBulletin Version 3.0.1
powered_by_vbulletin 2025。