这是一个新手问题。在我简单的学习石头剪刀布游戏程序中,我有一个游戏实例类。游戏实例类有几个私有(private)成员,如总回合计数、获胜计数、平局计数等。这些类成员仅在公共(public)游戏实例的类方法中使用,它开始和处理游戏。我是否应该按照良好的代码风格为我的类(class)成员创建特殊的私有(private) getter 和 setter 方法?在游戏处理方法中直接与类(class)成员合作是否更好?
class GameInstance{
unsigned int m_totalTurns;
unsigned int m_wins;
unsigned int m_loses;
unsigned int m_ties;
int getWins() const; // is it a bad idea?
int getLoses() const; // is it a bad idea?
int getTotalTurns() const; // is it a bad idea?
int getTies() const; // is it a bad idea?
// some setters-like incrementing // is it a bad idea?
// same private members functions // is it a bad idea?
// .... // is it a bad idea?
void finishGame();
public:
explicit GameInstance():m_totalTurns(0), m_wins(0), m_loses(0), m_ties(0){};
void startGame();
};
最佳答案
您可能会将 getter 公开,否则没有意义。
关于任何 getter 或 setter,它们都是类接口(interface)的一部分。如果您不想在外部允许直接获取或设置这些成员,请不要公开 getter 和 setter。
对于你来说,getters 可能是个主意,setters 看起来可能不是个好主意,如果你更愿意使用 addResult()
指定赢、平或输并将一个加到相关的统计。
作为单个 getter 的替代方案,您可能有一个“getGameStats()”,它一次返回所有 4 个。
如果您询问的是 getter 而不是提供公共(public)访问权限(而不是根本不提供访问权限),对于具有方法的类,您通常应该将所有数据成员设为私有(private)并使用 getter,如有必要,还应使用 setter。调试使用它们的代码也更容易,因为您可以在访问变量的位置插入断点。
在“纯数据”结构中,您可以公开成员。事实上,在这种情况下,您可能有一个从 getGameStats() 函数返回的“GameStats”结构。 GameStats 本身只包含数字,您可以将这些公开。但是,您类中的 GameStats 实例应该是私有(private)实例。
关于c++ - Setter 和 getter 的必要性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13642541/