假设我们有一个对象升降机电梯具有打开和关闭门的状态,电梯门是另一回事即
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
的私人成员。
例如:
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;
};