假设我们有一个对象电梯 电梯有开门和关门的状态, 电梯门是一个不同的对象 即,
Class Elevator{
private:
ElevatorDoor door;
int state
};
我想做的是,当一个人试图打开电梯门时,她必须与门对象而不是电梯本身进行交互,但门对象应该能够改变私有(private)数据成员(即状态)。 这怎么可能?
最佳答案
首先,将 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
的 friend ,这样 Person
可以到达Elevator
的私有(private)成员。
例如:
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;
};
关于c++ - 另一个包含的对象如何改变容器对象的私有(private)数据成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18417542/