0
假設我們有一個對象電梯 電梯有開啓和關閉車門的狀態, 電梯門是不同的對象 即另一個對象可以如何改變容器對象的私有數據成員?
Class Elevator{
private:
ElevatorDoor door;
int state
};
我想要做的是,當一個人試圖打開電梯門,她必須與門對象而不是電梯本身交互,但門對象應該能夠改變私人數據成員(這是狀態)。 這怎麼可能?
假設我們有一個對象電梯 電梯有開啓和關閉車門的狀態, 電梯門是不同的對象 即另一個對象可以如何改變容器對象的私有數據成員?
Class Elevator{
private:
ElevatorDoor door;
int state
};
我想要做的是,當一個人試圖打開電梯門,她必須與門對象而不是電梯本身交互,但門對象應該能夠改變私人數據成員(這是狀態)。 這怎麼可能?
首先,移動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
的功能,也可以使Person
的Elevator
的朋友,讓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;
};
這一塊國家的屬於門,沒有電梯。 – Mat
將'state'的引用傳遞給'door'的'Open'函數(你確實有一個,對吧?)。但是,我同意馬特。 – jrok