C++: Source Code (Can be cross-platform) -> Binary (NOT Cross-platform)
Java: Source Code (Can be cross-platform) -> Java Binary -> JVM (Runs Java Binary on every platform)
فرقشون اینه که باینری نهایی C++ شمارو سیستم عامل اجرا میکنه به صورت مستقیم، ولی تو جاوا، این JVM ه که باینری شمارو اجرا میکنه، نه سیستم عامل. واسه همین اگه JVM رو روی سیستمتون نصب کنید، اکثر کدهای جاوا رو میتونید روش اجرا کنید.
ولی خب کدی که شما توی C++ مینویسید رو میشه روی همه سیستم عامل ها کامپایل کرد، به شرط اینکه از توابع مخصوص یک سیستم عامل استفاده نکنید. اگر هم مجبور به استفاده شدید، میتونید برای اون تابع خاص، کدهای مختص به هر سیستم عامل رو قرار بدید توی header های جدا، و توی Preprocessor یا مثلن CMake، شرط بذارید که اگه سیستم عامل linux بود، فایل myclass_linux.h رو include کن، اگه ویندوز بود myclass_windows.h رو و به همین منوال برای بقیه سیستم عامل ها.