Besides the normal explenation of being visible or not to derived classes, is their any other difference?
If you make it more visible, is it taking more or less memory, does it slow thing down or...?
Apart from the accessibility of members outside or to the derived classes, access specifiers might affect the object layout.
Quoting from my other answer:
Usually, memory address for data members increases in the order they're defined in the class . But this order may be disrupted at any place where the access-specifiers (private
, protected
, public
) are encountered. This has been discussed in great detail in Inside the C++ Object Model by Lippman.
An excerpt from C/C++ Users Journal,
The compiler isn't allowed to do this rearrangement itself, though. The standard requires that all data that's in the same public:, protected:, or private: must be laid out in that order by the compiler. If you intersperse your data with access specifiers, though, the compiler is allowed to rearrange the access-specifier-delimited blocks of data to improve the layout, which is why some people like putting an access specifier in front of every data member.
Interesting, isn't it?