Question de Cours & code 5 pts
0) Objet composite : En programmation orientée objet, un objet composite est un objet qui contient d'autres objets. Il s'agit d'un modèle de conception où les objets sont organisés en une structure arborescente pour représenter une hiérarchie tout en permettant de traiter les objets individuels et les compositions d'objets de manière uniforme.
1) La différence fondamentale entre une instance d'une classe et une classe est que la classe est un modèle ou un plan à partir duquel des objets peuvent être créés, tandis qu'une instance est un objet spécifique créé à partir de ce modèle.
2) Dans un constructeur ou une méthode d'instance, le mot clé "this" fait référence à l'instance actuelle de la classe. Il est utilisé pour différencier les variables d'instance des paramètres ou des variables locales portant le même nom.
3) Le rôle du constructeur par défaut est d'initialiser les variables d'instance d'une classe avec des valeurs par défaut si aucun autre constructeur n'est explicitement défini. Il est automatiquement appelé lors de la création d'une instance de classe sans paramètres.
4) Une classe abstraite est une classe qui ne peut pas être instanciée directement et qui peut contenir des méthodes abstraites, c'est-à-dire des méthodes déclarées mais non implémentées. L'intérêt d'une classe abstraite est de fournir un modèle commun pour des classes dérivées, en spécifiant des méthodes que les classes dérivées doivent implémenter tout en permettant une certaine implémentation par défaut.
5) Le langage C++ est un langage de programmation totalement compilé, tout comme le langage C. Cela signifie que le code source est traduit en langage machine par un compilateur avant d'être exécuté. Il n'est pas interprété.
6) Le mécanisme du codage en ligne (inline) en C++ est une directive pour le compilateur indiquant que le code d'une fonction doit être incorporé directement à l'endroit où la fonction est appelée, plutôt que d'être appelé de manière conventionnelle. Cela peut améliorer les performances en évitant les coûts de l'appel de fonction, mais peut également augmenter la taille du code.
Problème 15 pts
A)------------
#ifndef ELEVE_H
#define ELEVE_H
#include <string>
class Eleve {
private:
static int nbreCreation;
int matricule;
std::string nom;
int noteMath;
int noteInfo;
int notePhysique;
public:
Eleve(std::string nom);
Eleve(std::string nom, int noteMath, int noteInfo, int notePhysique);
std::string getNom() const;
int getMatricule() const;
int getNoteMath() const;
int getNoteInfo() const;
int getNotePhysique() const;
void setNoteMath(int noteMath);
void setNoteInfo(int noteInfo);
void setNotePhysique(int notePhysique);
void affichage() const;
float moyenne() const;
bool operator==(const Eleve& e) const;
static Eleve lire();
};
#endif // ELEVE_H
B)---------------
#include "eleve.h"
#include <iostream>
using namespace std;
int Eleve::nbreCreation = 0;
Eleve::Eleve(string nom) {
this->nom = nom;
this->matricule = ++nbreCreation;
}
Eleve::Eleve(string nom, int noteMath, int noteInfo, int notePhysique) {
this->nom = nom;
this->matricule = ++nbreCreation;
this->noteMath = noteMath;
this->noteInfo = noteInfo;
this->notePhysique = notePhysique;
}
string Eleve::getNom() const {
return nom;
}
int Eleve::getMatricule() const {
return matricule;
}
int Eleve::getNoteMath() const {
return noteMath;
}
int Eleve::getNoteInfo() const {
return noteInfo;
}
int Eleve::getNotePhysique() const {
return notePhysique;
}
void Eleve::setNoteMath(int noteMath) {
this->noteMath = noteMath;
}
void Eleve::setNoteInfo(int noteInfo) {
this->noteInfo = noteInfo;
}
void Eleve::setNotePhysique(int notePhysique) {
this->notePhysique = notePhysique;
}
void Eleve::affichage() const {
cout << "Eleve [" << "Matricule " << matricule << ", Nom " << nom << ", Mathématiques " << noteMath << ", Informatique " << noteInfo << ", Physique " << notePhysique << "]." << endl;
}
float Eleve::moyenne() const {
return (noteMath + noteInfo + notePhysique) / 3.0;
}
bool Eleve::operator==(const Eleve& e) const {
return matricule == e.matricule;
}
Eleve Eleve::lire() {
string nom;
int noteMath, noteInfo, notePhysique;
cout << "Entrer le nom de l'élève : ";
cin >> nom;
cout << "Entrer la note en Mathématiques : ";
cin >> noteMath;
cout << "Entrer la note en Informatique : ";
cin >> noteInfo;
cout << "Entrer la note en Physique : ";
cin >> notePhysique;
Eleve *pt = new Eleve(nom, noteMath, noteInfo, notePhysique);
return *pt;
}
C)-----------
#include "eleve.h"
int main() {
Eleve eleve1("Alice");
eleve1.affichage();
Eleve eleve2("Bob", 15, 18, 12);
eleve2.affichage();
cout << "La moyenne de l'élève 2 est : " << eleve2.moyenne() << endl;
if (eleve1 == eleve2) {
cout << "Les deux élèves ont le même matricule." << endl;
} else {
cout << "Les deux élèves n'ont pas le même matricule." << endl;
}
Eleve eleve3 = Eleve::lire();
eleve3.affichage();
return 0;
}