封装(信息隐藏)是一个非常有用的概念,可确保在类的API中仅发布最起码的最小细节。
但是我不禁想到C ++这样做的方式有点不足。例如,以(基于摄氏温度)的温度类为例:
class tTemp {
private:
double temp;
double tempF (double);
public:
tTemp ();
~tTemp ();
setTemp (double);
double getTemp ();
double getTempF ();
};
现在,这是一个非常简单的情况,但它说明封装并不完美。 “真实”封装将隐藏all不必要的信息,例如:
temp
变量(及其类型)维护的事实。因此,理想情况下,在我看来,该类的实现者将使用上面的标头,但该类的任何客户端都只会看到公共位。
[不要误会我,我没有批评C ++,因为它符合防止客户端using私有位的既定目的,但是对于更复杂的类,您可以根据C ++轻松地得出内部细节”私有数据和功能的名称,类型和签名。
C ++如何允许实现者隐藏此信息(假设它[可能])?在C语言中,我只使用不透明类型,以便隐藏内部细节,但是在C ++中如何实现?我想我可以维护一个 separatevoid *
的实例(在我的代码中进行广播) ,但这似乎是一个相当痛苦的过程。在C ++中,有没有更简单的方法可以达到相同的目的?
Temp
接口的抽象类:unique_ptr
变体,因此另一种方法是在可见类中使用void *
,如下所示。这将允许您使用C ++ 11之前的编译器,以及上述的gcc之类的编译器,这些编译器仅对C ++ 11具有实验性支持。char
数组: