Le C++ permet de surcharger des fonctions, c'est à dire de déclarer plusieurs fonctions avec le même nom, tant qu'elles ont des types de paramètres d'appel différents. Cela permet d'uniformiser l'utilisation des fonctions: il n'y a pas besoin de se souvenir du nom particulier d'une fonction pour un type particulier d'argument.
Le C++ offre une possibilité très intéressante qui est de pouvoir surcharger les opérateurs existants: +, -, *, /, <<, >>, etc, pour les objets d'une nouvelle classe. Il suffit pour cela de redéfinir les opérateurs comme des méthodes ou fonctions amies normales. Pour les opérateurs autres que << et >> la redéfinition peut se faire de deux façons:
1. type_de_retour operator nom_opérateur (arguments); où operator est un mot clé du C++. Le premier argument de l'opérateur est implicite et correspond à l'objet appelant. Ainsi dans objet1 + objet2, objet1 est l'objet appelant le +.
2. friend type_de_retour nom_operatuer (argument1, arguments). Les opérateurs << et >> sont obligatoirement déclarés comme fonctions amies car ils prennent en premier argument le flot sur lequel ils agissent. Leur déclaration est donc de la forme: friend type_flot& operator << (type_flot&, type_objet). Les types de flots possibles sont principalement ostream pour une sortie et istream pour une entrée.  ;