Carbon is a library, which is very similar to Win32 (i.e. Windows) code. It is what most cross platform applications use, since as Lt Major Burns says, it is more familiar to developers. You can call it from C, C++, and probably other languages. That said, it is _not_ a language.
Cocoa is a library that is usable from Objective-C or Java. It's more 'modern', and kinda integrates better with the OS. Things like automatic spell checking in a text box (like the one I'm typing in now) are only available in Cocoa apps, not Carbon. This is just one example of how Cocoa seems better integrated into the OS. The 'look' of Cocoa applications adheres better to the OS X guidelines, mainly because the changes to the OS X interface (for some reason) do not always apply to Carbon applications.
If you want to port a C++ application from Windows, you will most likely want to concentrate on Carbon. However, I have a better suggestion. Since you are talking about bringing a C++ application over from Windows, the chances are high that it is written in MFC. If it is, you should stay away from Carbon and Cocoa. Instead you should us
wxWidgets. It is similar to MFC, and it is cross platform, running on anything from Palm OS, to OS X.
wxWidgets is a good option because it actually uses native controls and doesn't emulate them, like Qt or Java Swing does. The benefit of that is your app looks great, and behaves great too
. On OS X, you even have the option of using either Cocoa or Carbon controls.
So if you are thinking of porting a Windows C++ app that was written using MFC, you really must look at wxWidgets. For a moderately sized application (approx 10,000 lines), you may even get it ported in under a day.