how to download the current code from an arduino board?

Yes, look up avrdude. You'll want to use something like this (it worked on my computer, but you'll have to change the ports and probably some other stuff.)

You open up cmd (assuming windows; essentially same for linux and mac though), then type

"C:\arduino-1.0\hardware\tools\avrdude -p m328p -C C:\arduino-1.0\hardware\tools\avrdude.conf -c arduino -D -P COM5 -U flash:r:output.bin:r"

changing each of the "C:\arduino-1.0"s to where your arduino is located (it should work on multiple versions) and changing "output.bin" to where you want the output going.

The small problem is that it's not in C++ anymore, it's in machine code. Meaning you can't* edit it

*conditional can't

There is no way to get the C++ out of it, save disassemblers and stuff.