Géométrie
En C++, les différentes extensions de l'ancêtre C peuvent être combinées de façon à obtenir la solution la plus adéquate à un problème traité. C'est un peu comme si elles correspondaient à des axes et que le nombre de dimensions était augmenté (droite, surface, volume ) en les ajoutant.
L'amélioration la plus immédiate est la surcharge des noms de fonctions - le même nom pouvant être employé, certains sous-programmes ne se distinguent que par le nombre et les types de leurs paramètres - et les valeurs par défaut optionnelles des dits paramètres. Ceci apporte une grande liberté pour la création des fonctions, au point que parfois ce n'est qu'au moment de l'appel à l'une d'elles que le compilateur remarque qu'il est incapable de décider laquelle utiliser à cause des conversions implicites de types ou de l'éventuelle absence de quelques paramètres.
L'extension fondamentale de C++ est bien sûr celle des classes, dont les méthodes mettent aussi en pratique la nouveauté précédente, et qui peuvent être combinées selon plusieurs possibilités. Il y a l'héritage simple ou multiple : une classe peut dériver d'une (ou plusieurs) parente dont elle récupère les mécanismes. Un objet d'une classe créée auparavant peut aussi être déclaré dans une autre comme n'importe quelle variable d'un type prédéfini. Il suffit ensuite de faire des appels à ses sous-programmes. Enfin, une classe peut être entièrement définie et incluse à l'intérieur d'une autre l'englobant. Ceci permet par exemple de hiérarchiser la complexité d'objets qui inclurait un trop grand nombre de détails.
Les templates - fonctions et classe génériques - ont été ajoutés vers 1990. Ils peuvent être paramétrés indifféremment à partir de types de données prédéfinis ou de classes (à condition que ces dernières implémentent les fonctionnalités particulières auxquelles ils font appel, comme des opérateurs). Un template peut dériver d'une classe habituelle ou d'un autre template. Une classe peut dériver d'un template en fixant ses paramètres. Il y a bien sûr aussi les possibilités de l'inclusion comme une variable ou de la définition complète à un sous-niveau de la classe.