这样做有什么意义:
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;
}