Articles

Surcharge des opérateurs : bonnes pratiques

C++, Opérateurs, Bonnes Pratiques

operator= #

Membre obligatoire

Le standard C++ exige que l’operator= soit défini comme une fonction membre de la classe.

Il doit retourner *this pour permettre le chaînage (a = b = c).

Il doit aussi empêcher l’auto-affectation. Sans cette condition, alors on a un UB (Undefined Behavior).

NamedPoint& NamedPoint::operator=(const NamedPoint& p)
{
    if (this == &p)
    {
      return *this;
    }

    ...

    return *this;
}
📝 À NOTER
Cet opérateur est obligatoire pour les classes qui gèrent des ressources dynamiques (pointeurs bruts, allocations). Dans le cas contraire, alors operator= = default est suffisant.

operator<< et operator>> #

Non-membres obligatoires

...

Quelle version de C++ pour le cours ?

C++, Visual Studio, Compilateurs

Durant le cours, nous utiliserons le C++23. Dans certains cas, si la version du compilateur utilisé est trop ancienne, alors certaines fonctionnalités de C++23 ne seront pas disponibles. À l’inverse, il est aussi possible que certaines “possibilités” aient été enlevées dans les versions les plus récentes du C++. Par exemple, la possibilité de lire, depuis std::cin dans un char* a été supprimée depuis C++20, pour des raisons de sécurité (risque de dépassement de buffer).

...

Surcharge et conversions implicites

C++, Avancé

Lorsqu’un appel de fonction ne correspond pas exactement à une signature, le compilateur C++ effectue des conversions implicites pour tenter de trouver une correspondance. Ce mécanisme est au coeur de la résolution de surcharge (overload resolution).

Les 3 rangs de conversion #

Le compilateur C++ classe les conversions implicites en 3 rangs, du plus prioritaire au moins prioritaire :

RangNomExemples
1Exact matchAucune conversion, ajout de const, lvalue-to-rvalue
2Promotionfloatdouble, shortint, charint
3Conversiondoubleint, doublefloat, intfloat

Exemple concret #

Considérons deux surcharges :

...

Prise en main de Visual Studio 2026

Visual Studio 2026, Général

Durant le cours de C++, nous utiliserons Visual Studio 2026 Community Edition comme environnement de développement. Ce document a pour but de vous aider à prendre en main cet environnement de développement, et à vous donner les premières étapes pour créer un projet, écrire du code, compiler, exécuter et débugger votre programme. Dans certains cas, il faut aussi configurer Visual Studio pour s’assurer que la bonne version du C++ est utilisée (C++23).

...