安装者和吸气剂的必要性

时间:2012-11-30 09:43:02

标签: c++

这是一个新手问题。在我简单的学习摇滚剪刀纸游戏程序中,我有单个游戏实例类。游戏实例类有几个私有成员,如总转数,获胜数,领带数等。这些类成员仅用于公共游戏实例的类方法,它启动和处理游戏。我应该按照良好的代码风格为我的班级成员创建特殊的私有getter和setter方法吗?在游戏处理方法中直接与班级成员合作是否更好?

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();
};

4 个答案:

答案 0 :(得分:4)

你可能会把吸气剂公之于众,或者没有任何意义。

对于任何getter或setter,它们都是该类接口的一部分。如果您不希望从外部直接获取这些成员或设置它们,请不要公开getter和setter。

有了你的,吸气鬼可能是一个想法,如果你宁愿让addResult()指定一个胜利,平局或者失败并且在相关的统计数据中加一个,那么setter看起来可能是一个坏主意。

作为单个getter的替代方法,你可能会有一个“getGameStats()”,它可以一次性返回所有4个。

如果您询问getter而不是公开访问(而不是完全不提供访问权限),对于具有方法的类,通常应该将所有数据成员设为私有,并使用getter和必要的setter。调试使用它们的代码也更容易,因为您可以将断点插入到访问变量的位置。

在“纯数据”结构中,您可以将成员公开。实际上在这种情况下,您可能会有一个“GameStats”结构,您可以从getGameStats()函数返回该结构。 GameStats本身只包含数字,你可以公开这些数字。但是,您的类中的GameStats实例应该是一个私有实例。

答案 1 :(得分:1)

我认为这是一个很好的方法。它隐藏了实施。编辑起来比较简单。假设您有100个使用getTotalTurns()的地方。有一天你需要改变吸气剂的逻辑。你需要改变一个地方而不是100个。不要考虑性能。编译器可能会内联所有这些功能。正如@CachCow所说,没有真正的理由让他们成为私人(塞特/吸气者)。您可以使它们受到保护,以授予派生类的访问权限。但大多数时间的吸气剂/制定者都是供公众使用的。

答案 2 :(得分:0)

如果您有单线程项目和主界面,并且与用户的交互都在GameInstance类中,则您无需在游戏过程中访问theese字段。 当游戏结束时,你可以通过struct获得所有这些:

struct GameInfo
{
    unsigned int m_totalTurns;
    unsigned int m_wins;
    unsigned int m_loses;
    unsigned int m_ties;
};

class GameInstance
{
private:
    GameInfo gameInfo;
public:
    GameInfo GetInfo() const;
};

这种方法仍然安全,但您不必编写烦人的吸气剂数量。

答案 3 :(得分:0)

关于何时/为什么要在这里使用getter和setter,有一个相当好的讨论:
SO Getters and Setters Question

但它经常值得使用它们,即使它只是供内部使用,它确保当您访问这些值时,您正在以统一的方式进行,确保在您编辑它们时您遵守您的规则如何修改它们。

基本上它有助于在大多数情况下使代码更清晰。

编辑:
  我应该指出,在使用私人吸气剂和制定者时,它更多的是个人选择,所以没有真正的“错误”答案,除非有一些我不知道的东西