1003 Flashcards
Écrit une hiérarchie d’héritage.
Code.
Quand passer par reference constante?
Quand obj en parametre
Quoi tester?
Methodes publiques et throw.
Heritage vs compo?
Compo c’est que tu utilise un objet comme attribut. Ex: Triangle qui a un polygone comme atribut.
Dans le .cpp tu peux initialliser ton polygone comme ca:
Triangle::Triangle(p1, p2, p3) : m_polygone(3){ m_polygone.asgPoint(p1)…. }
Protected?
Private, sauf pour classes dérivés.
Remplacer vs heriter vs augmenter une methode?
Remplacer : ex tu remplaces B::f(x) par D::f(x){nouvel algo}
Hériter : Utiliser directement B::f(x) sans changement
Augmenter : remplace par D::f(x) ET appel d’abord B::f(x) dans le corps de D::f(x) avant le reste des autres tâches.
Quels sont les 3 types de polymorphismes?
Surcharge
Paramétrisable (templates).
Polymorphisme pur: pour traitement sur objets d’une même famille. Doit être sur des pointeurs.
Comment utiliser polymorphisme pur?
Tu déclare une methode virtual dans classe de base et tous les dérivés.
Les prototypes doivent toutes etre identiques.
3 ingrédient pour traitement générique de polymorphisme?
-Pointeurs d’une classe de base
-Hiérarchie de classe
-Un conteneur
+Methode virtuelle pour avoir le liage dynamique
Message d’erreur lié à vtable?
C’est qu’il y a incohérence dans hiérarchie de classe (donc peut-etre fonction virtuelle avec prototypes pas identiques dans l’interface de chaque classes)
Quels méthodes peuvent être vitruelles?
Toutes methodes peuvent être virtuelles sauf constructeur
Pourquoi mettre destructeur virtuel lors de polymorpisme pur?
A = classe de base. B = classe dérivée.
Supposons qu’on met un objet de type B dans un pointeur d’objet A (c’est légal puisque B est un A, mais pas le contraire).
Quand on va vouloir delete le pointeur a, on va seulement utiliser le destructeur de A, donc pas effacer totalement la mémoire qu’il prenait (à cause que la partie b est toujours présente.
Donc ajouter dans la déclaration de A va faire que lorsqu’on delete, on va tomber sur la vtable du destructeur et trouver l’adresse du destructeur de B et ainsi on va delete l’objet au complet.
Cest quoi une classe abstraite?
Classe théorique, ne permet plus de construire d’objets * SAVOIR TESTER UNE CLASSE ABSTRAITE*
Comment rendre une classe abstraite?
Des qu’on a une methode virtuelle pur (=0), cette methode DOIS etre DÉFINIS dans tous les AUTRES sous classes, mais pas besoin de la définir dans la classe de base.
Méthode virtuelle simple?
Obligatoire de la définir dans la classe de base, mais on peut la remplacer dans les classes dérivées. (Sans le =0)
new?
On récupere l’adresse d’un objet alloué sur le monceau et on le stock dans un pointeur.
Donc new renvoi l’adresse de l’objet sur le monceau
Delete?
on appel delete sur le POINTEUR contenant l’adresse pour libérer la mémoire.
Classe cannonique de coplien?
Classe qui a au moins 1 attribute qui est un pointeur qui pointe vers une zone alloué dynamiquement (ex le vecteur de pointeur qui appel clone).