1003 Flashcards

1
Q

Écrit une hiérarchie d’héritage.

A

Code.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Quand passer par reference constante?

A

Quand obj en parametre

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Quoi tester?

A

Methodes publiques et throw.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Heritage vs compo?

A

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)…. }

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Protected?

A

Private, sauf pour classes dérivés.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Remplacer vs heriter vs augmenter une methode?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Quels sont les 3 types de polymorphismes?

A

Surcharge

Paramétrisable (templates).

Polymorphisme pur: pour traitement sur objets d’une même famille. Doit être sur des pointeurs.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Comment utiliser polymorphisme pur?

A

Tu déclare une methode virtual dans classe de base et tous les dérivés.
Les prototypes doivent toutes etre identiques.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

3 ingrédient pour traitement générique de polymorphisme?

A

-Pointeurs d’une classe de base
-Hiérarchie de classe
-Un conteneur
+Methode virtuelle pour avoir le liage dynamique

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Message d’erreur lié à vtable?

A

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)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Quels méthodes peuvent être vitruelles?

A

Toutes methodes peuvent être virtuelles sauf constructeur

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Pourquoi mettre destructeur virtuel lors de polymorpisme pur?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Cest quoi une classe abstraite?

A

Classe théorique, ne permet plus de construire d’objets * SAVOIR TESTER UNE CLASSE ABSTRAITE*

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Comment rendre une classe abstraite?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Méthode virtuelle simple?

A

Obligatoire de la définir dans la classe de base, mais on peut la remplacer dans les classes dérivées. (Sans le =0)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

new?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Delete?

A

on appel delete sur le POINTEUR contenant l’adresse pour libérer la mémoire.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Classe cannonique de coplien?

A

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).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

3 truc a implanter pour coplien?

A
  • Il faut implanter:
  • destructeur,
  • operateur d’assignation
  • constructeur copie(profonde)
20
Q

Exception?

A

On separe le site de detection d’erreurs vs le site de traitement derreurs
2 type dans la std: logic_error(erreurs de prog) et runtime_error(erreurs plus complexe qui peuvent toujours ariver)

21
Q

Code une coplien

A

code

22
Q

*Coder une hiérarchie d’exceptions + throw try catch

A

Code

23
Q

Frameworks vs librairie?

A

Librairie : tu peux décider d’en utiliser juste une partie et tout va fonctionner.

Frameworks : c’est aussi une librairie de classes, mais il y a des relations/interactions entre elles. Donc tu dois tout prendre le framework pour que ça fonctionne.

24
Q

But d’un framework?

A

Pour coder plus facilement dans un contexte déterminer. Permet de réutiliser du code deja optimiser.

25
Q

A quoi sert la STL?

A

Permettent de spécifier dans un seul bout de code un ensemble de fonctions ou de classes surchargées (par leur type).

Permet plus grande utilisation du code

26
Q

Template?

A

C’est le principe de code non typé qui sera parametrable à l’utilisation (c’est-à-dire qu’on décide de son type lors de l’utilisation au lieu qu’on nous en impose un). Ca peut être sur une classe, fonction etc…

On instancie d’abord une CLASSE en choisissant son TYPE, ensuite on construit la classe pour manipuler les objets qui vont avec.

Template–>Classe–>Objet

27
Q

Quels sont les 2 truc a ajouter pour qu’une classe soit template?

A

template
ET
T partout ou le type parametrable se retrouve. Ex:

public:
T pop ();
void push (const T&);

private:
std::vector m_leStack

28
Q

Ou met on les définitions des methodes pour une classe template?

A

Dans le .hpp qui est inclui dans le .h.

29
Q

Est-ce que template est exclusif aux classes ?

A

NON

On peut faire des méthodes templates aussi.

30
Q

Savoir écrire du code avec un itérateur**

A

code

31
Q

Structure de la STL?

A

On a des algorithmes qui sont indépedants des conteneurs grace aux itérateurs.

32
Q

Quels sont les 2 types d’itérateurs?

A

Les itérateur permettant d’écrire dans le conteneur :
vector::iterator it;

Les itérateur permettant seulement de lire les conteneur (const):
vector::const_iterator itc;

33
Q

3 types de conteneurs?

A
  • sequences (vect, deque, list)
  • associations (set, multiset, map, multimap)
  • adapteurs (stack, queue. priority queue)
34
Q

Ou mettre invariants?

A

A la fin de tout methode non const et tout constructeur.

35
Q

Regles absolu contrat?

A

Pas de redondance

Activable/desactivable

36
Q

3 criteres d’un test unitaire?SRR

A

Structuré
Répétable
Rapport simple (OK ou pas)

37
Q

Qu’est-ce qu’un cas de tests?

A

C’est le regroupement du ou des tests pour une méthode donnée.
TEST(cas de test, nom du test(){}

38
Q

2 truc a faire pour heritage?

A
Include la classe mere
class derive : public ClassMere {}
pour header ET cpp
39
Q

Vtable?

A

La table qui stock les références des définitions de chaque méthode virtuelle selon la classe par laquelle elle est appelée.

  • Donc si tu as une erreur qui concerne vtable, va voir la cohérence de la déclaration des méthodes virtuelles.
  • *Tous les objets connaissent l’adresse de cette table.
40
Q

Quand declarer un destructeur virtual?

A

Des que tu as une classe de base. destructeur virtual PUBLIC

41
Q

Comment tester une classe abstraite?

A
  • Tu cree une classe derive
  • Tu defini tous les fonctions qui sont virtua (car cest oblige)
  • Au besoin tu appel les vrais fonctions de la classe de base dans tes fonction virtual. (ex return bib::copie(p_wtv)
42
Q

A quoi servent les methodes virtuels simples?

A

A etre redefinis (override) par les classes derives.
Donc les methodes virtual sont ceux dont le comportement differe dependemment de la classe.
virtual simple DOIT etre defini dans la classe mere, mais pas dans les autres*

43
Q

Virtuel simple vs pur?

A

Simple: permet aux classe de redefinir cette methode
Pur: Oblige les classes derives a definir cette methode

44
Q

Pourquoi l’assignation peut aussi poser un problème de gestion de mémoire? (avec pointeur sur mem dynamique comme attribut)

A

Parce-que lorsque tu fais une assignation (ex s1 = s2), tu fais une copie de surface (shallow copy) de s2 pour l’assigner à s1. Donc le contenue de s2 pointais sur de la mémoire du monceau, s2 va pointer sur exactement la même adresse sur le monceau.

Donc si on detruit s2 correctement, s1 aura perdu sa valeur et ca va planter quand on va essayer de detruire s1.

45
Q

Pourquoi redefinir operateur= coplien?

A

Pour meme raison que deepcopy, par defaut tu fais des shallow copy, donc 2 objets pointes sur la meme valeur. donc si tu en delete un comme il le faut, l’autre n”aura plus de valeur et ca va planter des qu’on tente de le detruire.

46
Q

Types d’erreurs?

A
  • Entrés de données
  • Matériel ou périphériques (ex manque papier imprimante)
  • Limitation ressources système (manque de ram)
  • Programmation (pour ça qu’on utilise contrat)
47
Q

3 types de conteneur STL?

A

Sequence (vector, deque, list)
Associatif(map, multimap, set, multiset)
Adapteur(stack, queue, prio queue)