sam*_*ius 2 c++ oop class object
这样做的意义何在:
class thing {
public:
void setMarbles(int _marbles){marbles = _marbles;}
void getMarbles(){return marbles;}
private:
int marbles;
};
Run Code Online (Sandbox Code Playgroud)
当你可以这样做时:
class thing {
public:
int marbles;
};
Run Code Online (Sandbox Code Playgroud)
我觉得这是一个非常常见的问题,但我在任何地方都找不到答案。我唯一的理论是,如果在新版本的类中更改了 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;
}
Run Code Online (Sandbox Code Playgroud)
thing您将来可能还想改变:
private:
char marbles; // support less marbles
Run Code Online (Sandbox Code Playgroud)
或者
private:
long marbles; // support more marbles
Run Code Online (Sandbox Code Playgroud)
然后,您可以在不破坏外部用户代码的情况下保留您的设置器。
这是一个非常好的实践,但是需要在实际项目中进行一些操作才能看到全部价值。简而言之:公共领域永远束缚着你的手脚。二传手留下了灵活性。
另外,正如评论中所建议的:
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;
}
Run Code Online (Sandbox Code Playgroud)