La surcharge des fonctions est un autre moyen d'obtenir des fonctions polymorphes. Dans un souci d'homogénéité avec les types de bases, il peut être utile de surcharger des opérateurs.
class complexe { double re,im ; public: complexe(const double r=0.0, const double i=0.0) ; friend complexe operator + (const complexe a, const complexe b) ; }; complexe::complexe(const double r, const double i) : re(r),im(i) {} complexe operator + (const complexe a,const complexe b) { return complexe(a.r+b.r,a.i+b.i) ; } ... complexe a(1.0,2.0) , b(2.0) ; complexe z = operator + (a,b) ; complexe z = a+b ; // on ecrira plutot cette ligneà détailler : le nouveau mot-clé operator, les fonctions amies.