c++ - 为什么在 C++ 中如此频繁地使用 get/set 函数?

标签 c++ class object oop

<分区>

这样做有什么意义:

class thing {
    
public:
    void setMarbles(int _marbles){marbles = _marbles;}
    void getMarbles(){return marbles;}
    
private:
    int marbles;
};

当你可以这样做的时候:

class thing {
    
public:
    int marbles;

};

我觉得这是一个 super 常见的问题,但我无法在任何地方找到答案。我唯一的理论是,如果在类的新版本中更改了 ov 变量的顺序,则使用旧类的程序将切换变量。这是正确的原因吗?

最佳答案

封装性、可维护性、可调试性

考虑:

void thing::setMarbles(int _marbles)
{
    // runtime error if incorrectly used
    assert(_marbles > 0);
    marbles = _marbles;
}

void thing::setMarbles(int _marbles)
{
    // log to some file to debug some specific scenario
    someLogUtility("Marbles write", _marbles);    
    marbles = _marbles;
}

您将来可能还想更改 thing:

private:
char marbles; // support less marbles

private:
long marbles; // support more marbles

然后,您可以在不破坏外部用户代码的情况下保留您的 setter。

这是一个非常好的做法,但需要在实际项目中进行一些尝试才能看到全部值(value)。简而言之:公共(public)领域永远束缚着你的双手。二传手留下了灵 active 。

此外,正如评论中所建议的:

void thing::setMarbles(int _marbles)
{
    // setting a breakpoint on next line is possible and lets you easily find where/when marbles is modified.
    marbles = _marbles;
}

关于c++ - 为什么在 C++ 中如此频繁地使用 get/set 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73167680/

相关文章:

c++ - fstream 读取 MSR

c++ - 在 Mac OS 上编译 Halide 的 camera_pipe 应用程序时出现问题

c++ - 我应该如何使用数组作为 C++ 中的类成员?

javascript - TypeError .val() 不是我在 Javascript 上选择的答案中的函数

c++ - `[ ]` 算子导致 map 编译错误

c++ - 为什么这个函数只被调用一次

php - 为什么要在类中初始化变量?

php - 如何创建一个可以转换为 boolean 值的 php 类(真值或假值)

javascript - 如何使用 Nodejs 将新 ID 递增并添加到 Json 数组树结构中的新节点

php - 类继承、代码分解、php 对象模型