How are accessors and mutators different? An example and explanation would be great.
            Asked
            
        
        
            Active
            
        
            Viewed 5.2k times
        
    16
            
            
        - 
                    1Accessor (or getter) methods allow you to access members of a data structure, while Mutator (or setter) methods allow you to change values of a data structure. – Chad Mar 09 '12 at 00:18
 
2 Answers
25
            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.
 
        LeopardSkinPillBoxHat
        
- 28,915
 - 15
 - 75
 - 111
 
4
            
            
        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.
        Duck
        
- 26,924
 - 5
 - 64
 - 92
 
- 
                    4
 - 
                    3
 - 
                    Yup, everyone elses should be too, but I didn't want to spam comments on every answer. +1 for you! – Wesley Petrowski Mar 09 '12 at 02:08
 - 
                    @Wesley - I made mine `const` too, just for completeness. – LeopardSkinPillBoxHat Mar 09 '12 at 03:32
 - 
                    The question is about OO terminology; the only hint that OP cares about C++ is in the tag. Making functions `const` is just part of the C++ "anti-OO" B.S. that isn't really related to the concepts of accessor and mutator. The fact that the accessor doesn't change the state is enough to make it an accessor. `const` just means we can invoke the accessor on `const` qualified object or similarly qualified references thereto. `const` allows for different overloads to coexist, but that's specifically when mutation is going on: the overloaded function isn't an abstract accessor. – Kaz Sep 23 '14 at 05:08