c++ - 为什么将类中的数据声明为私有(private)的示例很重要?

标签 c++ oop class private

我知道只有类才能访问数据,因此它“更安全”,但我真的不明白为什么它如此重要。也许是因为我没有把任何程序做得足够复杂,以至于数据可能会被意外更改,但在学习类(class)和被告知将事情设为私有(private)很重要时它有点令人困惑,因为当我唯一一次更改时它“更安全”程序中的数据是我明确表示的。谁能提供一些示例,说明如果数据不是私有(private)的,数据会被无意更改?

最佳答案

取决于您所说的“无意更改”是什么意思。所有代码都是由某人编写的,因此如果他正在更改类的成员变量,那么更改是有意的(至少从他这边来说)。然而,该类的实现者可能没有预料到这一点,它可能会破坏功能。

想象一个非常简单的堆栈:

class Stack
{
    public:
        int Items[10];
        int CurrentItemIndex;
}

现在 CurrentItemIndex 指向代表堆栈顶部当前项目的索引。如果有人继续更改它,那么您的堆栈已损坏。同样,有人可以将内容写入 Items。如果某物是 public 那么它通常是一个标志,表明它是为公共(public)使用而设计的。

同时将成员设为私有(private)提供了实现细节的封装。想象一下,有人通过检查 Items 在上述实现上迭代堆栈。然后,如果堆栈的实现被更改为链表以允许任意数量的项目,它将破坏所有代码。最后维护会杀了你。

类的公共(public)接口(interface)应该始终尽可能稳定,因为这是人们将要使用的。您不想仅仅因为更改了一些小细节就使用一个类来修改 x 行代码。

关于c++ - 为什么将类中的数据声明为私有(private)的示例很重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6038882/

相关文章:

需要文件 io 的 c++ 跨平台方法

c++ - OpenCV cv::findcontours StackOverflow 异常

php - 从未初始化的类型化属性中查找类型

javascript - 在 getter 方法中实例化类是否内存效率低下?什么 OOP 设计可以防止这种情况发生?

java - 了解层次结构方法调用

java - 对类中的多个设置方法使用扫描仪方法

c++ - 使用运算符 [ ] 将字符串放入映射中

C++ numeric_limits 常量和函数

java - 有没有办法在给定条件的情况下仅使用递归类型绑定(bind)字段?

python - 区分python函数和类函数