C++ es un lenguaje libre estandarizado por ISO muy grande, que admite: programación estructurada (la de toda la vida), la totalidad de la PO (objetos, herencia simple, herencia múltiple, polimorfismo, upcasting, downcasting, rti, interfazs, clases abstractas, clases amigas, operadores, sobrecarga, y mil cosas más avanzadas), programación genérica (plantillas, stl, conceptos de contenedores, estructuras de datos genéricas, <b>metaprogramación</b>, es una programación que no dispone ningún otro lenguaje mayoritario por el momento), y otras características más avanzadas como los punteros inteligentes, programación lambda, programación física. También se usa como programación por eventos (mfc, QuickTime, GTK y otras guis). Se usa para cualquier cosa, desde sistemas operativos hasta los juegos 3d de última generación pasando por servidores, pasando por las típicas aplicaciones de escritorio o un Office o openoffice, un reproductor Winamp y Windows medía player, un explorador web (internet explorer, Mozilla, Firefox), un cliente emule, un cliente torrent.
C# es un invento de Microsoft (lenguaje propietario) que mezcla las características básicas de C++ (no las avanzadas) simplificándolas al estilo java y ofreciendo un framework. El problema es que es. Net, y deja de ser código nativo/portable. Eso sí, el framework probé bastante facilidad de programación de tareas comunes, al igual que java. Por ello se genera el debate ¿java o c#? Su funcionalidad viene a ser parecida. Net es más nativo y java más virtual.