JiiPee <
n...@notvalid.com> writes:
[some white space reformatting done]
> seems to recommend 2). [...]
>
> I do currently 1) but wondering which way to go.
>
> Like now I have a "Settings" class. Simple data members. I started
> adding getters and setters....
I agree with Herb Sutter's recommendation that (assuming the
class or struct has some member functions) data members should
never be public. There are cases where for data members might
plausibly be made protected rather than private, but never
public. (Incidentally I am ignoring the "age/birthday" matter
that some other people have commented on, and assuming your
question is meant as generic, with 'age' being merely an
unfortunate choice of example.)
I suggest however a slightly different pattern than (1), along
these lines (disclaimer: not compiled):
class Person {
unsigned siblings_;
// ... other data members ...
public:
// ... other member functions
unsigned &siblings() { return siblings_; }
const unsigned &siblings() const { return siblings_; }
};
Now our accessor functions look more like data member access, but
they remain functions:
if( fred.siblings() > 0 ) ...
fred.siblings() += 1; // a new birth in fred's family
To me this pattern reads nicer on the client side than set/get
functions.