C# and Java for the most part can be decompiled back into human readable form, whether C# or Java, because neither really compiles to native machine code. .NET and Java need a VM to run that code.
You will never get C++ code that will be close to the original source. C might get closer, but still not well written.
As salem c points out there are decompilers available, though the really good ones are for-pay expensive.