C++封装,有什么用

C++ encapsulation, how is it useful

下面的幻灯片引用了 C++ 语言,它说

"encapsulation is about ensuring the user uses our ADT in a safe way"

但是,如果他可以访问我的 .h 文件,他可以编辑它,例如将我的 class 中声明的内容从私有更改为 public。

例如:

my_file.h:

class Complex {
private:
    double re, im;
public:
    double get_re();
};

然后用户可以写:(从私有更改为 public)

Complex s1;
s1.re=13;

请点击以下link查看图片(因为我没有点包含图片): enter image description here

使用 C++,您可以通过多种方式攻击您的脚。您也可以使用

#define private public

并且您无需更改代码中的任何内容即可访问私有接口...这里的重点不是如何破坏封装,而是关于您使用它实现的目标。

当你必须在 classstruct 之间做出选择时,你必须考虑你要用它来表示什么,如果那个东西有不变性,那么你应该使用class,否则一个 struct: encapsulation 会让你实现 "invariant" 使用封装,从而让用户访问数据,或者 set/modify 数据只使用 public 接口你已经定义了,而不是他想要的。

例如,如果你定义一个class Date,你有一个像"max 31 as day, max 12 as month ..."这样的不变量,但是如果你想定义例如DifferenceInDays,它将对于 days,只有一个 int,你可以允许用户在该结构中读取和写入他想要的任何内容,因为你没有任何不变性