Apologies for stating the obvious: plain Java (no JNI) is actually one decent answer to C++. Other and unrelated sins aside, Java's abstraction level sits in a very sweet spot. Just far enough from the hardware to avoid tedious and error-prone and insecure coding. Equipped with enough abstractions to enable programming at large.
I suspect .NET is at the very same point in the spectrum.
Interesting that these two are immensely successful in "enterprise" applications and very little on the desktop.