Programming knowledge is fairly transferable, as has been said above. It's largely the differences in APIs or syntax that can cause problems.
If you're going to port code between the two platforms, one thing I would advise is you check out the Model-View-Controller design pattern when thinking about your code design. I first came across this when looking at Cocoa development when OS X 10.0 first came out. Apple have a load of documentation about this on their developer web pages. The nice thing about orgainising your code around this structure is that non-OS / API specific stuff can be ported directly with no/minimal changes. The OS / API specific stuff can then be implemented as required. For instance, I'm currently porting a lot of Win32 code to Cocoa. In developing the Windows code, I stuck to the Model-View-Controller structure. I've written the Windows code so the Windows-specific WinMain and WndProc event handler make up the controller / view side and the rest of the code (classes for first person cameras, fractal landscapes etc) are written using C++ without any need for Microsoft-specific stuff.
Porting is then quite straightforward. X-Code and Interface Builder make it easy to create the relevant interfaces and the C++ stuff can be ported across with minimal changes (usually only include statements have to be changed). On the Mac side of things, Objective-C++ is very useful and makes this process far easier as your C++ classes can be linked directly to the Cocoa interface.