Exam 1 (module 2) Flashcards

1
Q

État d’un objet

A

Valeurs de ses attributs ou
de l’information qu’il
contient.

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

Comportement d’un objet

A

Ensemble des opérations
que l’on peut effectuer sur
celui-ci.

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

Identité d’un objet

A

Deux objets peuvent être exactement dans le même état,
mais sont différents de part leur identité unique (adresse en mémoire)

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

Objet (définition)

A

Entité discrète qui existe dans le temps et dans l’espace.

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

Classe (définition)

A

-Abstraction qui n’existe que dans les programmes
-Représente un ensemble d’objets qui partagent une structure commune et un comportement commun

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

Qu’est-ce qu’une classe définit

A

Les opérations permises sur les objets de la classe et les états qu’ils peuvent prendre

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

2 synonymes d’objet

A

instance et occurrence

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

Qu’est-ce que l’interface d’une classe?

A

Elle contient principalement les déclarations de toutes les
opérations applicables sur les instances de cette classe et elle définit ce qui est vu de l’extérieur

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

L’interface d’une classe est dans quel fichier?

A

Le .h

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

Qu’est-ce que l’implémentation d’une classe?

A

Ce qui est caché à l’intérieur de la classe (le code qui réalise les opérations qui sont définies dans l’interface).

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

L’implémentation d’une classe est dans quel fichier?

A

le .cpp

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

(publique ou privé?) Les méthodes sont xxx et les membres sont xxx.

A

méthodes = publiques, membres/attributs = privés

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

Pourquoi mettre quelque chose dans la partie privée de la classe?

A

Pour pas que l’utilisateur puisse le changer et faire des erreurs

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

Rôle d’une classe

A

Assurer la validité de tous les objets créés à partir d’elle

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

Quand est-ce qu’un objet doit être valide?

A

De sa création à sa destruction

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

À quoi sert l’encapsulation

A

Ne pas permettre l’accès direct aux attributs d’un objet (il faut passer par un accesseur et un mutateur)

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

Problèmes possibles si les attributs ne sont pas contrôlés

A

➢Possibilité de non-initialisation.
➢Possibilité de mauvaise assignation.
(Pas de garantie sur la validité des données)

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

La visibilité d’une classe est XXXX par défaut

A

privée! (la norme est de la spécifier explicitement)

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

(Vrai ou faux) On peut accéder directement à des attributs privés

A

faux

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

Norme du cours sur le nom d’un membre/attribut

A

m_blablabla

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

Pour utiliser une classe qu’on a fait il faut inclure quoi dans le main?

A

include Classe.h

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

Rôle des méthodes

A

Contrôler l’assignation des valeurs sur les champs

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

C’est quoi “this”

A

Un pointeur vers l’objet courant

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

Quand on crée un objet, qu’est-ce qui doit être initialisée pour qu’il soit cohérent?

A

ses attributs (à l’aide du constructeur)

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

Caractéristiques d’un constructeur

A

-Méthode spéciale qui a le même nom que la classe
-Est automatiquement appelé à la création d’un objet de cette classe
-N’a pas de type de retour
-Ne retourne pas de valeur

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

Pourquoi on ne peut pas créer un objet et l’initialiser après

A

Parce qu’il y a un lapse de temps où il n’est pas valide

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

(Vrai ou faux) Il est impossible d’avoir plusieurs constructeurs dans une même classe.

A

Faux! Ça se peut

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

C’est quoi la surcharge de méthode et comment ça marche?

A

C’est faire plusieurs méthodes du même nom. Lorsqu’une fonction surchargée est appelée, le compilateur sélectionne la bonne fonction selon les arguments (nombre, type, ordre…)

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

Si on veut une classe date qui accepte les paramètres jour, mois et année, mais qui fonctionne aussi sans paramètre. Quel est le code dans le .h?

A

class Date
{
public:
Date(); //constructeur par défaut
Date(int p_jour, int p_mois, int p_annee);

}; //ya un ; à la fin quand .h!

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

Comment initialiser les membres d’une classe dans le constructeur?

A

Avec une liste d’initialisation :
Date::Date(int p_jour, int p_mois, int p_annee)
: m_jour(p_jour), m_mois(p_mois), m_annee(p_annee)
{
//ne pas les mettre ici avec des =
}

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

La commande suivante sert à quoi?
Date()= delete;

A

Déclarer explicitement qu’on veut pas de compilateur par défaut

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

Qu’est-ce qu’un destructeur?

A

-Une méthode particulière de la classe qui porte le même nom que la classe, mais est précédé par un tilde ~
-Est exactement le complément du constructeur

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

(Vrai ou faux) Le destructeur détruit l’objet

A

Faux! Il fait le ménage à l’intérieur avant la destruction.

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

Est-ce que le destructeur reçoit un paramètre? Est-ce qu’il retourne une valeur?

A

Non et non! Pas de paramètre et retourne rien

35
Q

(Vrai ou faux) Il peut y avoir plusieurs destructeurs par classe.

A

Faux! UN SEUL destructeur par classe

36
Q

int main()
{
{
Date uneDate(1, 1, 1965);
}
return 0;
}

Où est la fin de la portée du destructeur?

A

int main()
{
{
Date uneDate(1, 1, 1965);
} //ici
return 0;
}

37
Q

Est-ce que c’est pertinent d’implanter un destructeur même si il a rien à faire?

Ex:
Date::~Date()
{
}

A

Non

38
Q

Norme du cours pour nommer une méthode d’accès? Et d’assignation?

A

Accès : reqDequoi
Assignation : asgDequoi

39
Q

class Date
{
public:
int reqJour () XXXX;

};

Qu’est-ce qu’il manque à l’initialisation la méthode d’accès?

A

const!! Une méthode d’accès est une méthode constante (on ne veut rien modifier on veut juste accéder à l’info (lecture))!

40
Q

class Date
{
public:
XXXX asgJour (int p_jour);

private:

};

Qu’est-ce qu’il manque à la méthode d’assignation?

A

void (pcq retourne rien, fait juste utiliser le paramètre qui lui est donné)

41
Q

Méthode de comparaison

A

-Pour comparer deux objets du même type
-retourne un booléen

42
Q

Pour que deux objets soient égaux, il faut que …

A

Tous les couples de paramètres soient égaux (valeurs des attributs)

43
Q

bool Date::estEgal(const Date& p_date) const
{
return m_jour == XXXX &&
m_mois == YYYY &&
m_annee == ZZZZ;
}

A

XXXX = p_date.m_jour
YYYY = p_date.m_mois
ZZZZ = p_date.m_annee

44
Q

int main()
{
Date date1(4,9,2002);
Date date2;
if (date2.estEgal(date1))

}
Quel est l’objet implant/courant et quel est l’objet paramètre?

A

implant = date1
paramètre = date2
inverse???

45
Q

Méthodes utilitaires

A
  • à l’intérieur de la classe sans pour autant vouloir
    en faire un service publique.
  • sont appelées par les autres méthodes de la
    classe.
46
Q

class Date
{
public:

std::string reqDateFormatee()
const;

private:
std::string reqNomMois() const;
};
Pourquoi méthode reqNomMois dans private?

A

Parce qu’elle est juste appelée dans reqDateFormatee (on en a pas besoin ailleurs, c’est une méthode utilitaire)

47
Q

std::string Date::reqNomMois () const
{
static string NomMois[] = {“janvier”, “février”, “mars”, “avril”,
“mai”, “juin”, “juillet”, “août”,
“septembre”, “octobre”,”novembre”, “décembre”};
return NomMois[reqMois()-1];
}
Pourquoi -1?

A

Parce que reqMois donne le numéro du mois (ex : janvier =1), mais l’index de la string commence à 0.

48
Q

Méthodes statiques

A

-Méthode de classe ne nécessitant pas la présence d’un objet pour le traitement
-Comme une fonction mais associée à la classe
-Ne touche pas aux attributs de la classe, à moins que ceux-ci ne soient aussi statiques (attribut commun à tous les objets de la classe)

49
Q

Est-ce qu’il faut mettre const pour une méthode statique?

A

non (exemple p.79)

50
Q

bool Date::estBissextile(int p_annee)
{
????
}

A

return (((p_annee % 4 == 0) && (p_annee % 100 != 0)) ||
((p_annee % 4 == 0) && (p_annee % 100 == 0) &&
(p_annee % 400 == 0)) );

51
Q

(Vrai ou faux) Une méthode statique a besoin d’un objet du type de la classe pour être appelée.

A

Faux, elle n’en a pas besoin

52
Q

(Norme) Toujours appeler les méthodes statiques avec la XXXX de la classe

A

portée (classe::méthodeStatique)
exemple : Date::estBissextile(2000)

53
Q

Quand on initialise un attribut statique il faut …

A

mettre la classe devant
exemple : int Etudiant::m_nbInstances=0;

54
Q

int main()
{
{
Etudiant et1, et2, et3;
cout &laquo_space;“Résultat :” &laquo_space;endl;
cout &laquo_space;Etudiant::reqNbInstances() &laquo_space;endl;
Etudiant et4, et5;
cout &laquo_space;Etudiant::reqNbInstances() &laquo_space;endl;
}
cout &laquo_space;Etudiant::reqNbInstances() &laquo_space;endl;
return 0;
}
Qu’est-ce qui est écrit dans la console quand on compile?

A

Résultat:
3
5
0 (voir p.84)

55
Q

Namespace

A
  • regroupement logique de fonctions, de classes, etc.
  • Possibilité de lui donner un nom.
  • NomDuNamespace::NomDeLEntite
56
Q

Ça sert à quoi un namespace

A

Qu’il n’y ait pas d’ambiguité quand deux fonctions ont le même prototype (chacune un namespace différent comme ça on sait laquelle prendre)

57
Q

Comment assigner un namespace à une fonction qu’on crée?

A

exemple : //c’est le .h
namespace util{
int fonction();
}

58
Q

Pourquoi ne pas utiliser plusieurs using namespace en même temps (qui contiennet des fonctions pareilles)?

A

Parce que ça ramène l’ambiguité (on sait pas quel choisir)

59
Q

(Vrai ou faux) Il ne faut JAMAIS utiliser de using namespace dans un .h

A

Vrai! ça polluerait les fichiers

60
Q

Comment faire pour qu’un using namespace soit local?

A

Mettre des {} autour

61
Q

(Vrai ou faux) On peut rajouter quelque chose dans un namespace
déjà défini.

A

Vrai

62
Q

Qu’est-ce que le polymorphisme?

A

La surcharge de méthodes (créer plusieurs méthodes du même nom dans la classe pourvu qu’elles varient au niveau des paramètres)

63
Q

Comment le compilateur sélectionne-t-il la bonne méthode quand une méthode surchargée est appelée?

A

Il regarde les paramètres (le nombre, le type et l’ordre)

64
Q

La surcharge doit être utilisée pour implanter des traitements XXXX.

A

similaires

65
Q

(Vrai ou faux) Le type de retour est pris en compte par le compilateur lors qu’il différencie les méthodes surchargées

A

Faux! Le type de retour n’est pas pris en compte fec si le reste est pareil il pense que c’est la même

66
Q

Comment mettre un paramètre par défaut à notre fonction?

A

Le mettre = à quelquechose direct dans son prototype.

exemple :
void imprimer (int valeur, int base = 10);
les deux lignes suivantes sont la mêmê chose :
imprimer (31);
imprimer (31, 10);

67
Q

Les paramètres par défaut sont vérifiés à XXXX et évalués à YYYY.

A

XXXX = la compilation
YYYY = l’exécution

68
Q

(Vrai ou faux) On peut mettre un paramètre par défaut à n’importe quelle position (1er argument, 2e, etc) dans le prototype.

A

Faux! Il doit être à la fin!! (Si plusieurs, ils doivent tous être en dernier)

69
Q

class A
{
public:
A();
A(int v1=0, int v2=0);
private:
int m_v1;
int m_v2;
};
Qu’est-ce qui marche pas?

A

Il y aura conflit entre A() et A(int v1=0, int v2=0)

70
Q

Surcharge des opérateurs

A

-Consiste à redéfinir des opérateurs usuels comme +, -, *, /, =, <,
[], etc… sur de nouveaux types : les classes
-Peut rendre la lecture du code plus facile

71
Q

Opérateurs qui ne peuvent PAS être surchargés

A

. .* :: ?: (liste de ceux qui peuvent p.108)

72
Q

(Vrai ou faux) On ne peut pas créer de nouveaux opérateurs

A

Vrai (|x|, y:=x, x**2 tous invalides)

73
Q

Ce qui est important de faire quand on surcharge un opérateur

A

Respecter les règles de préséance et d’associativité et éviter la confusion (faire des trucs qui fittent avec l’opérateur)

74
Q

Comment définir l’opérateur == sur des objets dates?

A

.h :
public:
bool operator== (const Date& p_date) const;
.cpp :
bool Date::operator==(const Date& p_date) const
{
return m_temps == p_date.m_temps;
}

75
Q

date1 == date2 ça revient à quoi?

A

date1.operator==(date2)

76
Q

Est-ce que v++ et ++v c’est pareil?

A

non

77
Q

Comment définir &laquo_space;sur un objet date?

A

std::ostream& operator«(std::ostream& p_os, const Date& p_date)
{
p_os &laquo_space;p_date.m_temps;
return p_os;
}
*faut que ça retourne un ostream pour pouvoir mettre un autre &laquo_space;après (si on veut cout dequoi d’autre)

78
Q

Quand utiliser le passage par valeur?

A

-Quand on ne veut pas modifier la valeur des données originales
-JUSTE sur types de base (int, float, char, double, bool) ou sur variables locales pcq sinon le coût de la copie est élevé

79
Q

Quand utiliser le passage par pointeurs?

A

-Pour éviter le coût de la copie
-Quand on veut que les données originales soient modifiées (accès direct)
*utilisé dans de rares cas (polymorphisme)

80
Q

Comment faire un passage par de chaque sorte (valeur, pointeur, référence, référence constante)?

string MettreEnMajuscule (XXXX)
{

}
string NOM = MettreEnMajuscule(YYYY)

A

valeur : XXXX=string p_texte & YYYY=nom
pointeur : XXXX=string* p_texte & YYYY=&nom
référence : XXXX=string& p_texte & YYYY=nom
référence constante : XXXX=const string& p_texte & YYYY=nom

81
Q

Quand utiliser le passage par référence?

A

-Pour éviter le coût de la copie
-Quand on veut que les données originales soient modifiées (accès direct)
-On prend plus lui que pointeur

82
Q

Quand utiliser le passage par référence constante?

A

-Pour éviter le coût de la copie
-Pour ne PAS modifier les données originales (les protège)
-Pareil que par copie/valeur, sans le coût

83
Q

Différence entre les 3 :
1) Mot& reqAdresse() const;
2) const Mot& reqAdresse() const;
3) Mot reqAdresse() const;

A

1) par référence (risque de retourner une variable locale et non respect de l’encapsulation) À NE PAS FAIRE
2) par référence constante
3) par valeur (pour retourner une variable locale)