从类中提供指向私有成员的指针

时间:2018-05-19 05:32:39

标签: c++ oop pointers private

我意识到提供一个返回指向私有方法的指针的方法会破坏封装,并将该字段暴露给使用该类的任何人。但是,假设如下:

你有一个类调用另一个类的方法(它需要一个私有字段的指针),私有成员的地址作为参数传递给这个方法。

据我所知,只要私有成员的地址仅以类的开发人员控制的方式公开,这不会破坏封装(即开发人员确切地知道它将如何被使用) 。当然,调用的方法可能(假设你没有写它)暴露私有成员,但我们是否需要向前看呢?我已经看过无数次了,所以我猜这不是设计不良的结果吗?

编写方法指向其他类的私有成员并修改它们是不好的做法?每个班级应该“只留意自己”吗?

2 个答案:

答案 0 :(得分:1)

这将是一个糟糕的设计,因为大多数类都有getter和setter来读取和写入对象。因此,如果该函数需要读取和写入,那么它应该请求对象引用,而不是指向任何私有memeber的指针。

在大多数情况下,当函数需要变量的引用时,它会要求引用常量值。

答案 1 :(得分:0)

  

我意识到提供一个返回指向私有方法的指针的方法会破坏封装,并将该字段暴露给使用该类的任何人。

首先不是这样。

一个具有返回指针作为其接口一部分的方法的类是绝对正确的,并且它返回一个成员变量的事实是外部世界不需要的实现细节知道。

现在,正如所说的那样,设计一个理智的类接口是非常困难的,这个接口涉及返回非拥有指针的函数,因此它是我们倾向于避免的东西。

就问题的第二部分而言,

编辑

任何类都应该理所当然地处理其公共接口的任何可能的使用排列(包括取消引用任何返回的指针)。什么或谁使用公共接口应该是完全不相关的,你应该假设该类的所有用户将使用整个公共API。

如果您只有特定类型或功能可以使用的课程部分,那么这正是friend的用途。但这与指向成员的指针无关,它适用于该类的任何和所有部分。