PCDVD數位科技討論區

PCDVD數位科技討論區 (https://www.pcdvd.com.tw/index.php)
-   疑難雜症區 (https://www.pcdvd.com.tw/forumdisplay.php?f=34)
-   -   關於C++的物件... (https://www.pcdvd.com.tw/showthread.php?t=335591)

poenxu 2004-05-17 05:25 PM

關於C++的物件...
 
最近被所寫的電梯題目困擾.我宣告了兩個class,分別是電梯和按鈕.
那經由main,會建立物件電梯跟物件按鈕.可是當物件按鈕收到指令時,
我該寫下什麼樣的指令,物件按鈕才有辦法與物件電梯溝通,並且告知物件電梯.
要電梯物件更改他private的floor屬性呢?
我想不出來該怎樣讓她們做到"物件與物件溝通"耶...
可有人可以指點個方向呼?

harrisonlin 2004-05-17 07:23 PM

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

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

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

poenxu 2004-05-18 08:40 PM

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

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

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


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

另外...請問成員是指屬性嗎?
因為我記得類別裡面有兩種東西,就是屬性跟function.
那這樣推過來,成員就是指...屬性囉?

harrisonlin 2004-05-18 11:08 PM


代碼:
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. 這個電梯和按鈕的設計很簡陋,例如一次只能前往一個樓層,不能開關門之類的,而且我覺得我的架構設計得有點糟 - 但是應該可以解釋你的疑點...

poenxu 2004-05-21 12:47 PM

class FloorButton {
private:
int floor;
string buttonText;
Elevator* pElevator;

以上恕刪一部分~

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

順便可以請教一下,在C++檔案裡面,XXX.h跟XXX.cpp的差別嗎?
因為老師去台北開會了,全宿舍又只有我在寫程式...一一"
實在是求教無門...並不是我偷懶,不想去問老師.

harrisonlin 2004-05-21 06:46 PM

引用:
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...

poenxu 2004-05-25 06:03 PM

可以請問一下這些問題嗎?
 
可以請問一下,關於這些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)


所有的時間均為GMT +8。 現在的時間是10:49 AM.

vBulletin Version 3.0.1
powered_by_vbulletin 2026。