ISC1cd #
Oral #
L’oral durera 30 minutes.
Avant l’oral #
Avant de passer, il faut absolument :
- Préparer votre éditeur : être capable de coder, compiler et exécuter du code rapidement.
- Vérifier que l’ordinateur peut être branché au projecteur. Il faut prévoir un adaptateur USB-C → HDMI si nécessaire.
- Ouvrir le code source de son projet dans l’éditeur.
- Bien relire son code et être capable de l’expliquer.
ATTENTION : tout le temps perdu au début de l’oral pénalisera la note finale.
Pendant l’oral #
- (Optionnel) Discussions sur le code de votre projet.
- [Très simple] Afficher un entier + compiler + exécuter ⇒ max. 1 minute.
- Exercice complet ressemblant à celui donné ci-dessous, à coder en direct ⇒ max. 20 minutes.
Exemple #
Écrire un programme qui gère les formes cercle et rectangle.
Classe Shape
#
Il faut implémenter la classe Shape qui contient en particulier la méthode décrite ci-dessous.
- Une méthode
area()qui retourne l’aire de la forme.
Classe Rectangle
#
Il faut implémenter la classe Rectangle qui hérite de la classe Shape, et qui contient en particulier les éléments décrits ci-dessous.
- Un attribut
m_lengthde typedouble, - Un attribut
m_widthde typedouble, - Une méthode
area()qui retourne l’aire du rectangle.
Classe Circle
#
Il faut implémenter la classe Circle qui hérite de la classe Shape, et qui contient en particulier les éléments décrits ci-dessous.
- Un attribut
m_radiusde typedouble, - Une méthode
area()qui retourne l’aire du cercle.
Main #
Dans le main(), il faut les éléments ci-dessous.
- Une liste de
Shapeimplémentée utilisant le containerstd::vector. Elle doit contenir au moins 2Rectangleet 2Circle, avec des dimensions différentes. - Une boucle qui parcourt la liste de
Shapeet qui affiche l’aire de chaque forme. - Une seconde liste de
Shapeimplémentée utilisant le containerstd::vector. - Les valeurs de la première liste sont copiées dans la seconde liste.
- Une boucle qui parcourt la seconde liste de
Shapeet qui affiche l’aire de chaque forme.
Ce qui est évalué #
Général #
- Éviter les copier-coller
- Ne pas dupliquer du code dans les classes dérivées
Création de classe #
- Déclarer une classe avec ses attributs et méthodes
- Choisir le bon niveau d’accès :
privatepar défaut (ouprotected) - Initialiser les attributs en classe :
double m_x{0.0}; - Marquer les méthodes
constquand elles ne modifient pas l’objet - Préférer
#pragma once(pas besoin d’#ifndef/#defineen plus)
Constructeurs #
- Utiliser la liste d’initialisation (
: m_x(x), m_y(y)), pas le corps du constructeur - Faire les vérifications nécessaires dans le constructeur (ex. vérifier que les dimensions sont positives)
- Savoir appeler le constructeur de la classe de base depuis la classe dérivée
- Passer les
std::stringparconst std::string&
Héritage #
- Savoir la syntaxe de l’héritage
- Inclure le header de la classe de base dans la classe dérivée
- Appeler une méthode de la classe parente
Méthodes virtuelles et polymorphisme #
- Destructeur virtuel obligatoire dans une classe de base
- Mot-clé
virtualdans la classe de base ; mot-cléoverride(sansvirtual) dans la classe dérivée - Comprendre et savoir expliquer : méthode virtuelle pure (
= 0) et classe abstraite - Savoir stocker des objets polymorphes dans un conteneur (
std::vector<Shape*>) - Appeler une méthode à partir d’un pointeur sur un objet
Conteneurs et boucles #
std::vector:push_back(),at()- Boucle range-based :
for (const auto &e : elems) { ... } - Connaître au moins une syntaxe de parcours qui fonctionne (range-for, itérateur ou index)
Comportement à l’oral #
- Préparer votre éditeur en amont : tout le temps perdu au début pénalise la note
- Pouvoir expliquer son code clairement (notamment les concepts : héritage, polymorphisme, virtuelle pure)
- Quand on bloque : essayer, montrer son raisonnement — l’enseignant peut aider, et savoir rebondir avec un indice est valorisé
- Repérer ses propres erreurs (oubli de
virtual, mauvais type de retour, etc.) est très valorisé - Comprendre les erreurs de compilation et les corriger est très valorisé