There are several options here:
1) Design a platform abstraction layer so you can write your code to the PAL and the PAL on each platform does the right thing. The problem with this is the PAL will resemble the lowest-common-denominator unless you're happy to stub-out the functions that don't do anything on the platforms that don't support them. Your common application logic can then be written in whatever is appropriate - probly C++.
2) Create your common code in something like C++ and your platform-specific code in the platform-specific framework (.NET / Obj-C). This allows you to have your common application logic as a Library which the platform-specific code pulls in.
3) A hybrid of (1) and (2) using #ifdef/#endif pairs to pull in relevant parts. I don't recommend this - it's painful.
4) Write the code for each platform completely independently and share the design, algorithms and digital assets (bitmaps, icons, sounds, etc). Yes, more to maintain but gives you best experience on each platform.
5) A web application as OMG_Peanuts suggested. This is a quick win but little-or-no platform-specific features.