另一个对象所包含的一个对象如何可以更改容器对象的私有数据成员



假设我们有一个对象升降机电梯具有打开和关闭门的状态,电梯门是另一回事即

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;
};

最新更新