accessor和mutator方法有什么区别?

MiN*_*EaK 8 c++

访问者和变异者有何不同?一个例子和解释会很棒.

Leo*_*Hat 18

一个存取器是用于一个类方法数据成员,而突变是用于一个类方法改变数据成员.

这是一个例子:

class MyBar;

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

    private:
        MyBar mMyBar;
}
Run Code Online (Sandbox Code Playgroud)

最佳做法是创建数据成员private(如上例所示),并且只能通过访问器和更改器访问它们.这是由于以下原因:

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