C++ moderne et alternatives en C

La surcharge de fonctions en C++ et l'alternative en C

Dans cette leçon, vous allez utiliser la surcharge de fonctions (function overloading) en C++ pour qu'un même nom de fonction fonctionne avec plusieurs types, puis la comparer avec l'approche du C.

Introduction

La surcharge de fonctions (function overloading) permet d'avoir plusieurs fonctions portant le même nom mais avec des types de paramètres différents. À l'appel, le compilateur C++ choisit la bonne version selon le type des arguments. C n'a pas cette possibilité, chaque fonction doit donc avoir un nom différent.

Points importants

  • Comprenez comment on fait en C avant d'apprendre les abstractions du C++.
  • Exprimez la possession des ressources avec RAII et la sémantique de valeur (value semantics).
  • Préférez les outils sûrs du point de vue des types du C++ aux macros et aux conversions de type.

Exemples de code C et C++

C
Exécuter →
main.c
#include <stdio.h>

int max_int(int left, int right) {
    return left > right ? left : right;
}

double max_double(double left, double right) {
    return left > right ? left : right;
}

int main(void) {
    printf("%d %.1f\n", max_int(3, 8), max_double(4.5, 2.0));
}
Résultat de l’exécution
8 4.5
C++
Exécuter →
main.cpp
#include <iostream>

int maximum(int left, int right) {
    return left > right ? left : right;
}

double maximum(double left, double right) {
    return left > right ? left : right;
}

int main() {
    std::cout << maximum(3, 8) << ' '
              << maximum(4.5, 2.0) << '\n';
}
Résultat de l’exécution
8 4.5

Comparaison entre C et C++

En C, les deux fonctions max_int et max_double doivent indiquer le type dans leur nom. En C++, elles s'appellent toutes deux maximum, et le compilateur choisit la bonne version selon que l'argument est un int ou un double. Ce choix se fait à la compilation, il ne ralentit donc pas le programme.

C

C utilise des conventions de nommage, des callbacks, des macros et des struct de contexte.

C++

C++ offre des abstractions à la portée bien délimitée, sûres pour les types et généralement sans coût supplémentaire à l'exécution.

Exercices d'approfondissement

Exécutez les deux versions, puis modifiez le code pour observer la différence de sécurité qu'apporte chaque langage.

  • Écrivez d'abord le mécanisme en C, puis utilisez la fonctionnalité équivalente du C++.
  • Remplacez la libération manuelle des ressources par RAII.
  • Vérifiez si la fonctionnalité provoque des allocations mémoire ou des appels de fonctions virtuelles.

S'entraîner avec un défi

Utilisez le contenu de cette leçon pour résoudre un vrai problème. Chaque défi s'exécute dans le navigateur, avec des tests instantanés et une revue par l'IA.

Tous les défis