What is the difference between accessor and mutator methods?

后端 未结 2 1972
名媛妹妹
名媛妹妹 2020-12-14 10:43

How are accessors and mutators different? An example and explanation would be great.

相关标签:
2条回答
  • 2020-12-14 11:33
    class foo
    {
        private:
    
            int a;
        public:
            int  accessA() const { return(a);}
            void mutateA(const int A) { a = A;}
    }
    

    Also known as getters and setters and probably a dozen other terms.

    0 讨论(0)
  • 2020-12-14 11:42

    An accessor is a class method used to read data members, while a mutator is a class method used to change data members.

    Here's an example:

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

    It's best practice to make data members private (as in the example above) and only access them via accessors and mutators. This is for the following reasons:

    • You know when they are accessed (and can debug this via a breakpoint).
    • The mutator can validate the input to ensure it fits within certain constraints.
    • If you need to change the internal implementation, you can do so without breaking a lot of external code -- instead you just modify the way the accessors/mutators reference the internal data.
    0 讨论(0)
提交回复
热议问题