0

Lets say we have an object elevator Elevator have states for open and closed doors, elevators door is a different object ie,

Class Elevator{

private:
ElevatorDoor door;
int state
};

What I want to do is, when a person tries to open elevator door, she has to interact with door object not elevator itself, but the door object should be able to mutate a private data member (which is state). How is this possible?

4

1 回答 1

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,或者您可以与 交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;
};
于 2013-08-24T10:35:10.200 回答