> cant someone see the relationship between the compiled code, and the .cpp file?
Yes, you can look at the object code, and a skilled human can derive a program which has the same functionality, but it will not be the original program. But this is an awful lot of work (which will cost you a lot of time and or money). It's usually easier to just observe what the program does and write a program to work in the same way. But this won't be the original code either.
Some decompilers can do this to a limited extent, but they are very limited. To make any real progress, they need a lot of additional information (like say a symbol table, and knowledge of the compiler used in the first place).
For example, you might have written
[tt] volume = width * height * depth;[/tt]
But most decompilers are likely to spit out
[tt] v1 = v2 * v3 * v4;[/tt]
You've got the code, but all the meaning has been lost.
Across 1000's of lines of code, this is not going to be a pretty sight.
for, while, switch etc are likely to be riddled with goto's in the decompiled version.
The short of it is, a compiler would be able to compile it, but no human would want to touch the code with a barge pole!
--