Langage C/C++

Quadrimestre 3 -

48 heures

Coordinateur : NVS

Enseignants : NVS, ABS

Description générale du cours

Apprentissage des langages C et C++

Ces deux langages sont enseignés à des étudiants censés posséder de bonnes bases en Java et en langage d'assemblage. La norme C étudiée est C11. La norme C++ est C++17.

Matières de base utilisées

Néant.

Corequis

Néant.

Matières de base utilisées

Langage Java (cours et laboratoire du bloc 1) et laboratoire de technique des microprocesseurs et assembleur micro (laboratoire du bloc 1).

Objectifs

Apprentissage de la manipulation des pointeurs et des spécificités du C / C++ par rapport à Java.

Acquis d'apprentissage

Acquis (mesurables) d'apprentissage.

C

  • Lire un code source C11 et
    • prévoir le fonctionnement du programme résultant.
    • détecter les erreurs de compilation.
    • détecter les erreurs d'édition des liens.
    • détecter les erreurs à l'exécution.
  • Écrire du code C11 en utilisant judicieusement :
    • les tableaux statiques et les chaînes de caractères.
    • les pointeurs.
    • l'allocation dynamique de mémoire.

C++

  • Lire un code source C++17 et
    • prévoir le fonctionnement du programme résultant.
    • détecter les erreurs de compilation.
    • détecter les erreurs d'édition des liens.
    • détecter les erreurs à l'exécution.
  • Écrire du code C++17 en utilisant ou implémentant judicieusement :
    • les opérateurs de bonne gestion des ressources (constructeurs, destructeur, opérateur d'assignation et de déplacement, pointeurs intelligents).
    • les conteneurs standards (string, vector, set, etc.).
    • les classes d'exception.
    • le modèle de conception Observateur / Sujet d'observation.
    • les techniques liées à l'héritage (surcharge, surdéfinition, polymorphisme).
    • les classes d'exception.
    • modèles de fonctions et de classes.
    • expressions lambda.

Ce qui est réellement acquis de ces apprentissages idéaux étant bien entendu mesurable à l'examen.

Plan du cours

Langage C (+-17 heures)

  • Structure et contenu d'un programme C ;
  • Fonction, prototype, fichier en-tête, directive au pré-processeur ;
  • Similitude avec Java des opérateurs et structures de contrôle ;
  • Types primitifs, énumération, structure et union ;
  • Pointeurs, tableaux, chaînes de caractères ;
  • Gestion dynamique de la mémoire ;
  • Fonctions de la bibliothèque standard.

Le langage C++ (+-33 heures)

  • Historique ;
  • C++, un meilleur C : commentaire, emplacement des déclarations de variables, prototype de fonction, nullptr, void et const, référence, fonction inline, new et delete, cin et cout ;
  • C++ : un langage orienté objet : classe, attribut, méthode, static, constructeur et destructeur, copie et déplacement, héritage, polymorphisme, surdéfinition et surcharge de méthode, classe abstraite, amitié ;
  • C++ : une multitude d'apports autres que les objets : argument par défaut, surcharge de fonction et d'opérateur, gestion des exceptions, espace de nom, transtypage, programmation générique, expressions lambda, inférence de type ;
  • La bibliothèque standard : STL (vector, deque, list, set, map, stack, unordered_set, unordered_map ; iterateur ; algorithmes), flux et string.

Remarque : tous les chapitres sont illustrés par des exemples de programme.

Bibliographie

  • Brian W. Kernighan et Dennis M. Ritchie, Le langage C : Norme ANSI, 2e édition, Dunod (2004)
  • Tony Crawford et Peter Prinz, C In a Nutshell, O'Reilly (2006)
  • Bjarn Stroustrup, Le Langage C++, Pearson (2003)
  • Ray Lischner, C++ In a Nutshell, O'Reilly (2003)