c++ - 另一个包含的对象如何改变容器对象的私有(private)数据成员?

标签 c++ class inheritance polymorphism

假设我们有一个对象电梯 电梯有开门和关门的状态, 电梯门是一个不同的对象 即,

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/

相关文章:

javascript - JQuery 插件类不工作

c++ - 从 hana::tuple_t 到 hana::tuple

c++ - 将类的静态函数声明为友元

java - 我写了 Accessors 和 Mutators 方法,但我仍然无法访问私有(private)变量!为什么?

python - python中类变量的继承

c# - 从继承自 UIVIewcontroller 的类继承(xamarin 和 c#)

java - 如何检查一个类是否扩展了另一个

c++ - 如何根据类的模板参数专门化模板成员函数?

c++ - 我可以列表初始化一个只 move 类型的 vector 吗?

python - 如何使用平方递归?