They are all IDEs, rather than compilers. They are a kind of front-end that makes the compiler more friendly to use. You write your code in the IDE and there is a "build" button somewhere that you push when you want to produce an executable from the code you've written. When you hit this button, the IDE looks at whatever type of "Project" file that it uses and gets all the files that contain all the code you've written and generates a series of arguments that can be passed to the actual compiler. The IDE then calls the compiler a bunch of times, with the correct arguments to collect all your files together and produce the executable that you want.
Bloodshed basically uses GCC as its compiler, whereas MS Visual Studio uses Microsoft's own MSVC++ compiler. Code::Blocks is very flexible and can use GCC (MingW / GNU GCC), MSVC++, Digital Mars, Borland C++ 5.5, Open Watcom and others (according to their website). The different compilers have different features and benefits. They also implement and enforce the C++ standards in different ways, so the machine code that they produce will be different - although the final programs should have the same behaviour in the end. The differences can be in efficiency of certain aspects of execution, or in memory usage etc.
If you are so inclined, you can do away with the IDE and interact with the compiler directly using the command line. This is a pretty effective way to work for very simple programs. However, for a large project with many files, the number of compilation steps and the number of files involved in each step can make the direct interaction with the compiler prohibitively complicated, which is why we let the IDE do it :)