Any OO language with native code generation suffers the same problem.
It is one of the consequences of the fragile base class problem in OO.
And it actually has private data members! Isn't that nice.
(Private meaning they aren't declared in the public headers, not meaning it uses the useless 'private' attribute.)
This is not only about data member access. It also applies to adding methods on the base class that change the behavior of existing methods in already declared subclasses.
Take a cup of coffee and read this famous paper about the issue,
http://www.cas.mcmaster.ca/~emil/Publications_files/Mikhajlo...
Any OO language with native code generation suffers the same problem.
It is one of the consequences of the fragile base class problem in OO.