class A
{
public:
A() : a_(0) {;}
int & refA() { return a_; } // return reference to a_
int valA() { return a_; } // return copy of a_
protected:
int a_;
};
A aa;
aa.refA() = 1; // you are changing the value of a_
aa.valA() = 1; // illegal as a_ is not accessible via valA()