假设我们有一个对象电梯具有打开和关闭的门的状态,电梯门是一个不同的对象,即,
Class Elevator{
private:
ElevatorDoor door;
int state
};我想要做的是,当一个人试图打开电梯门时,她必须与门对象交互,而不是电梯本身,但门对象应该能够改变私有数据成员(即状态)。这怎麽可能?
发布于 2013-08-24 18:35:10
首先,将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的私有成员。
例如:
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;
};https://stackoverflow.com/questions/18417542
复制相似问题