Podcast
Questions and Answers
Quelle est la principale différence entre l'allocation statique et l'allocation dynamique des variables ?
Quelle est la principale différence entre l'allocation statique et l'allocation dynamique des variables ?
Quel est un inconvénient de l'allocation mémoire sur le tas par rapport à celle sur la pile ?
Quel est un inconvénient de l'allocation mémoire sur le tas par rapport à celle sur la pile ?
Quel terme décrit le processus d'allocation et de désallocation de la mémoire dans un programme utilisant la pile ?
Quel terme décrit le processus d'allocation et de désallocation de la mémoire dans un programme utilisant la pile ?
Quelle directive préprocesseur est utilisée pour inclure la bibliothèque standard iostream en C++ ?
Quelle directive préprocesseur est utilisée pour inclure la bibliothèque standard iostream en C++ ?
Signup and view all the answers
Quel opérateur est utilisé pour l'entrée de flux de données en C++ ?
Quel opérateur est utilisé pour l'entrée de flux de données en C++ ?
Signup and view all the answers
Qu'est-ce qui est vrai sur l'allocation des objets dans la pile ?
Qu'est-ce qui est vrai sur l'allocation des objets dans la pile ?
Signup and view all the answers
Quel terme décrit la taille d'une allocation réalisée à la demande ?
Quel terme décrit la taille d'une allocation réalisée à la demande ?
Signup and view all the answers
Quel élément est employé pour l'utilisation de la fonction principale dans un programme C++ ?
Quel élément est employé pour l'utilisation de la fonction principale dans un programme C++ ?
Signup and view all the answers
Quel mot clé est utilisé pour déclarer une méthode virtuelle dans C++ ?
Quel mot clé est utilisé pour déclarer une méthode virtuelle dans C++ ?
Signup and view all the answers
Quelle est la conséquence de déclarer une méthode comme 'final' dans C++11 ?
Quelle est la conséquence de déclarer une méthode comme 'final' dans C++11 ?
Signup and view all the answers
Lorsque l'on invoque une méthode virtuelle à partir d'une référence, quel comportement est observé ?
Lorsque l'on invoque une méthode virtuelle à partir d'une référence, quel comportement est observé ?
Signup and view all the answers
Pourquoi est-il conseillé de définir des destructeurs comme virtuels ?
Pourquoi est-il conseillé de définir des destructeurs comme virtuels ?
Signup and view all the answers
Qu'est-ce qu'une méthode virtuelle pure ?
Qu'est-ce qu'une méthode virtuelle pure ?
Signup and view all the answers
Quel est l'impact de la construction dynamique d'instances avec 'new' sur la virtualité ?
Quel est l'impact de la construction dynamique d'instances avec 'new' sur la virtualité ?
Signup and view all the answers
Que se passe-t-il si une méthode déclarée const
essaie de changer la valeur d'une variable?
Que se passe-t-il si une méthode déclarée const
essaie de changer la valeur d'une variable?
Signup and view all the answers
Quel type de visibilité est généralement attribué aux attributs d'une classe en C++?
Quel type de visibilité est généralement attribué aux attributs d'une classe en C++?
Signup and view all the answers
Dans quelle situation un constructeur peut-il être virtuel ?
Dans quelle situation un constructeur peut-il être virtuel ?
Signup and view all the answers
Quels éléments devons-nous inclure dans une déclaration de classe pour une meilleure représentation en C++?
Quels éléments devons-nous inclure dans une déclaration de classe pour une meilleure représentation en C++?
Signup and view all the answers
Quel est l'ordre d'appel des constructeurs dans une hiérarchie d'héritage ?
Quel est l'ordre d'appel des constructeurs dans une hiérarchie d'héritage ?
Signup and view all the answers
Qu'est-ce qu'un constructeur par défaut?
Qu'est-ce qu'un constructeur par défaut?
Signup and view all the answers
Comment une classe peut-elle gérer des ambiguïtés de noms entre ses attributs et d'autres variables?
Comment une classe peut-elle gérer des ambiguïtés de noms entre ses attributs et d'autres variables?
Signup and view all the answers
Que se passe-t-il si aucun constructeur n'est spécifié dans une classe?
Que se passe-t-il si aucun constructeur n'est spécifié dans une classe?
Signup and view all the answers
Quelle est la fonction d'une liste d'initialisation dans un constructeur?
Quelle est la fonction d'une liste d'initialisation dans un constructeur?
Signup and view all the answers
Quel type de méthode est généralement utilisé pour modifier les valeurs des attributs?
Quel type de méthode est généralement utilisé pour modifier les valeurs des attributs?
Signup and view all the answers
Study Notes
Résolution Statique des Liens
- L’objet est reconnu par son type de déclaration.
Résolution Dynamique des Liens
- La résolution dynamique des liens permet de choisir la méthode à exécuter au moment de l'exécution selon la nature réelle des instances en mémoire.
- Pour utiliser la résolution dynamique, il faut déclarer la méthode comme virtuelle avec le mot clé
virtual
. - Cette déclaration se fait dans la classe la plus générale qui admet cette méthode.
- Il faut utiliser des références et/ou des pointeurs pour invoquer les méthodes virtuelles.
- Le passage par références ou par adresse, ainsi que la construction dynamique des instances avec
new
sont nécessaires.
Virtualité
- La virtualité est transmise par transitivité à la méthode de la classe « fille ».
- Lorsque la méthode virtuelle est invoquée à partir d'une référence ou d’un pointeur vers une instance, c'est la méthode du type réel de l'instance qui sera exécutée.
- Il est conseillé de toujours définir des destructeurs comme virtuels pour éviter la destruction partielle des objets.
- Un constructeur ne peut pas être virtuel. Si un constructeur utilise des méthodes virtuelles, le caractère virtuel de ces méthodes sera ignoré.
Classe Finale et Méthodes Finales
- Depuis C++11, si une classe est déclarée
final
, on ne peut pas dériver d’elle une autre classe. - Une méthode déclarée
final
ne peut pas être redéfinie au niveau des classes dérivées.
Méthode Virtuelle Pure
- Une méthode virtuelle pure dans une classe n'a pas de comportement significatif.
- Sa signification se retrouvera dans les classes dérivées de la classe où elle est définie.
Allocation de Mémoire
- L’appel des constructeurs des superclasses se fait dans l’ordre d’héritage.
- Heap: Allocation dynamique des objets (le programmeur alloue et désalloue la mémoire).
- Stack: Allocation temporaire des objets (existent seulement durant l’exécution d’une fonction).
Différences Heap et Stack
- Stack: Allocation contiguë, accès plus rapide, LIFO (Last In First Out), allocation/désallocation automatique, taille limitée.
- Heap: Allocation non contiguë, accès moins rapide, allocation/désallocation manuelle, taille à la demande.
Exemples d'Allocation
- Stack:
int* creerTab()
{
int tab;
return tab;
}
- Heap:
int* creerTab()
{
int* tab = new int;
return tab;
}
Préprocesseur
- Direcive préprocesseur.
- Utiliser une bibliothèque standard
iostream
. - Utiliser une bibliothèque personnelle.
- Utiliser les objets prédéfinis dans le nom de domaine
std
. - Fonction principale du programme.
Objets Prédéfinis
-
cout
: la sortie standard du programme (console). -
cin:
l’entrée standard des données saisies au clavier. -
endl
: fin de la ligne. -
>
: opérateur d’entrée du flux de données.
Initialisation des Variables
- Il existe 3 manières d’initialiser une variable.
- Plus de détails sur https://en.cppreference.com/w/cpp/language/initialization
Allocation Statique vs Allocation Dynamique
-
Statique:
- Les variables sont allouées de manière permanente.
- L’allocation est faite avant l’exécution du programme.
- Pas de possibilité de réutilisation de la mémoire.
-
Dynamique:
- Les variables ne sont allouées que si votre unité de programme est active.
- L’allocation est faite pendant l’exécution du programme.
- La mémoire est réutilisable et peut être libérée lorsqu’elle n’est pas nécessaire (opérateur
delete
). - Les paramètres ayant une valeur par défaut devront être placés à la fin de la liste des paramètres de la fonction.
Définition d'une Classe
- Nom de la classe.
- Visibilité des attributs (en général privée).
- Attributs de la classe (données).
- Visibilité des méthodes (en général publique).
- Méthodes prédicat (ne changent pas les valeurs des attributs).
- Méthodes action (peuvent changer les valeurs des attributs).
- Si une méthode déclarée
const
doit changer la valeur d’une variable, alors on doit déclarer cette variablemutable
.
Pointeur this
- En cas d'ambiguïté de nom entre les attributs et d'autres variables dans les méthodes, on dispose du pointeur sur l'instance courante,
this
, qui nous aide à pointer les attributs de la classe.
Prototype de Classe
- Pour une meilleure représentation d'une classe en C++, on peut définir un prototype de la classe dans un fichier
.h
et la définition de ses méthodes dans un autre fichier.cpp
.
Constructeurs
- Les constructeurs sont des méthodes particulières qui ont pour responsabilité d'initialiser les attributs de la classe.
- Le constructeur porte le même nom que la classe, n'a pas de type de retour et est invoqué automatiquement où on créé une instance.
- Une classe peut avoir plusieurs constructeurs.
- Si aucun constructeur n'est spécifié, le compilateur fournit un constructeur par défaut à la classe. Attention, celui-ci laisse non initialisé les attributs de type de base.
Listes d'Initialisation
- Les listes d'initialisation servent pour initialiser les attributs et/ou d'appeler leurs constructeurs (s'ils sont des objets).
Constructeur Par Défaut
- Constructeur par défaut implicite: Initialise les attributs à 0.
- Constructeur par défaut non défini: Pas de constructeur par défaut.
Exemple de Classe
- On désire représenter l’objet Point caractérisé par une abscisse et une ordonnée de type réel.
Studying That Suits You
Use AI to generate personalized quizzes and flashcards to suit your learning preferences.
Related Documents
Description
Ce quiz aborde la résolution statique et dynamique des liens en programmation orientée objet. Il met l'accent sur l'importance de la déclaration des méthodes virtuelles et sur la façon dont elles sont exécutées selon le type réel des instances. Testez vos connaissances sur la virtualité et son application.