首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一个包含在另一个对象中的对象如何能够改变容器对象的私有数据成员?

一个包含在另一个对象中的对象如何能够改变容器对象的私有数据成员?
EN

Stack Overflow用户
提问于 2013-08-24 18:26:59
回答 1查看 72关注 0票数 0

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

代码语言:javascript
复制
Class Elevator{

private:
ElevatorDoor door;
int state
};

我想要做的是,当一个人试图打开电梯门时,她必须与门对象交互,而不是电梯本身,但门对象应该能够改变私有数据成员(即状态)。这怎麽可能?

EN

回答 1

Stack Overflow用户

发布于 2013-08-24 18:35:10

首先,将state移入ElevatorDoor类本身:

代码语言:javascript
复制
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的私有成员。

例如:

代码语言:javascript
复制
class Elevator{
public:
  ElevatorDoor& GetDoor() { return door; }

private:
  ElevatorDoor door;
};

代码语言:javascript
复制
class Elevator{
  friend Person;
private:
  ElevatorDoor door;
};

在第二种情况下,Person当然可以触摸Elevator中的任何内容。

另一种选择是在电梯上具有门操纵器功能,它可以对可以做的事情进行更精细的控制:

代码语言:javascript
复制
class Elevator{
public:
  void OpenDoor() { door->Open(); }
  void CloseDoor() { door->Close(); }
private:
  ElevatorDoor door;
};
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18417542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档