c++ - Setter 和 getter 的必要性

标签 c++

这是一个新手问题。在我简单的学习石头剪刀布游戏程序中,我有一个游戏实例类。游戏实例类有几个私有(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/

相关文章:

c++ void函数不改变字符串的值

c++ - 内存分配和 0 大小 : can I get the memory leaks?

c++ - 如何使用迭代器从对象列表返回指向对象的指针

c++ - shared_ptr 从 unique_ptr 到数组

c++ - 最短路径实现问题

Android NDK 包含 Eigen

c++ - 输出声明堆在释放后被修改,但没有添加到堆中

c++ - 多项式ADT构造函数和删除

c++ - 如何在 C++ 中打乱对象 vector

c++ - 使用 openCV 和 fftw3 Visual Studio 2010 时出现链接器错误