OK, so hopefully this is a subjective enough question for Programmers, but here goes. I am continuously broadening my knowledge of languages and software engineering practices... and I've run into something that just makes no sense to me whatsoever.
In C++, class declarations include
private: methods and parameters in the header file, which, theoretically, is what you pass to the user to include if you make them a lib.
@interfaces do pretty much the same thing, forcing you to list your private members (at least, there's a way to get private methods in the implementation file).
From what I can tell, Java and C# allow you to provide an interface/protocol which can declare all the publicly accessible properties/methods and gives the coder the ability to hide all implementation details in the implementation file.
Why? Encapsulation is one of the main principles of OOP, why do C++ and Obj-C lack this basic ability? Is there some kind of best-practices work-around for Obj-C or C++ that hides all implementation?