2013-08-24 20 views
0

假設我們有一個對象電梯 電梯有開啓和關閉車門的狀態, 電梯門是不同的對象 即另一個對象可以如何改變容器對象的私有數據成員?

Class Elevator{ 

private: 
ElevatorDoor door; 
int state 
}; 

我想要做的是,當一個人試圖打開電梯門,她必須與門對象而不是電梯本身交互,但門對象應該能夠改變私人數據成員(這是狀態)。 這怎麼可能?

+2

這一塊國家的屬於門,沒有電梯。 – Mat

+0

將'state'的引用傳遞給'door'的'Open'函數(你確實有一個,對吧?)。但是,我同意馬特。 – jrok

回答

2

首先,移動state到ElevatorDoor類本身:

class ElevatorDoor 
{ 
public: 
    ElevatorDoor() { state = DoorClosed; } 
    void Open() { state = DoorOpen; } 
    void Close() { state = DoorClosed; } 
    bool IsClosed() { return (state == DoorClosed); } 
private: 
    int state; 
}; 

你可以有一個產生參考ElevatorDoor的功能,也可以使PersonElevator的朋友,讓Person能到私人會員Elevator

E.g:

class Elevator{ 
public: 
    ElevatorDoor& GetDoor() { return door; } 

private: 
    ElevatorDoor door; 
}; 

class Elevator{ 
    friend Person; 
private: 
    ElevatorDoor door; 
}; 

在第二種情況下,Person當然可以觸摸Elevator內部的任何物件。

另一種選擇,這讓更多的細粒度控制什麼可以做,是對電梯門機械手功能:

class Elevator{ 
public: 
    void OpenDoor() { door->Open(); } 
    void CloseDoor() { door->Close(); } 
private: 
    ElevatorDoor door; 
}; 
相關問題