【问题标题】:What is the difference between accessor and mutator methods?访问器和修改器方法有什么区别?
【发布时间】:2012-03-09 00:13:52
【问题描述】:

访问器和修改器有何不同?一个例子和解释会很棒。

【问题讨论】:

  • Accessor(或 getter)方法允许您访问数据结构的成员,而 Mutator(或 setter)方法允许您更改数据结构的值。

标签: c++


【解决方案1】:

访问器是用于读取数据成员的类方法,而mutator是用于改变 数据成员。

这是一个例子:

class MyBar;

class Foo
{
    public:
        MyBar GetMyBar() const { return mMyBar; } // accessor
        void SetMyBar(MyBar aMyBar) { mMyBar = aMyBar; } // mutator

    private:
        MyBar mMyBar;
}

最佳做法是创建数据成员private(如上例所示)并且仅通过访问器和修改器访问它们。原因如下:

  • 您知道它们何时被访问(并且可以通过断点进行调试)。
  • mutator 可以验证输入以确保它符合特定的约束条件。
  • 如果您需要更改内部实现,您可以在不破坏大量外部代码的情况下执行此操作,而只需修改访问器/修改器引用内部数据的方式。

【讨论】:

    【解决方案2】:
    class foo
    {
        private:
    
            int a;
        public:
            int  accessA() const { return(a);}
            void mutateA(const int A) { a = A;}
    }
    

    也称为 getter 和 setter,可能还有十几个其他术语。

    【讨论】:

    • 你的访问器应该是常量! :)
    • @Wesley Petrowski - 很公平,但其他人不应该也一样吗?
    • 是的,其他人也应该如此,但我不想在每个答案上都向 cmets 发送垃圾邮件。为你 +1!
    • @Wesley - 我也做了我的const,只是为了完整。
    • 问题是关于 OO 术语; OP 关心 C++ 的唯一提示是在标签中。制作函数const 只是 C++“反 OO”B.S. 的一部分。这与访问器和修改器的概念并不真正相关。访问器不更改状态这一事实足以使其成为访问器。 const 只是意味着我们可以在 const 限定对象或类似限定的引用上调用访问器。 const 允许不同的重载共存,但特别是在发生突变时:重载函数不是抽象访问器。
    猜你喜欢
    • 2012-08-30
    • 1970-01-01
    • 2019-08-07
    • 1970-01-01
    • 2011-08-02
    • 2011-01-15
    • 1970-01-01
    • 2015-11-26
    相关资源
    最近更新 更多