Exercice 01 :
Classes : Une classe en programmation orientée objet (POO) est un ensemble de variables (attributs) et de fonctions (méthodes) qui permettent de modéliser un objet ou un concept. Les classes sont les modèles qui permettent de créer des objets en POO.
Objet : Un objet est une instance d'une classe. Il est créé à partir du modèle fourni par la classe et possède des attributs et des méthodes qui lui sont propres. Les objets sont les éléments concrets que l'on manipule en POO.
Polymorphisme : Le polymorphisme est la capacité d'un objet à prendre plusieurs formes. Il permet à une méthode d'avoir plusieurs implémentations différentes selon le type de l'objet sur lequel elle est appelée. On distingue le polymorphisme statique (overloading) et le polymorphisme dynamique (overriding).
Encapsulation : L'encapsulation est un mécanisme qui permet de cacher les détails de l'implémentation d'une classe aux utilisateurs de cette classe. Elle permet de garantir que les attributs d'un objet ne peuvent être modifiés que par l'intermédiaire de méthodes de la classe.
Héritage : L'héritage est un mécanisme qui permet de définir une nouvelle classe à partir d'une classe existante en héritant de ses attributs et de ses méthodes. La classe héritée est appelée superclasse ou classe de base, et la nouvelle classe est appelée sous-classe ou classe dérivée. La sous-classe peut étendre ou spécialiser le comportement de la superclasse.
POO signifie Programmation Orientée Objet. Les concepts fondamentaux de la POO sont :
- L'encapsulation
- L'héritage
- Le polymorphisme
- Les classes et les objets
Exercice 02 :
Voici une fonction C++ qui détermine si un nombre est parfait ou non :
bool estParfait(int n) {
int somme = 0;
for (int i = 1; i < n; i++) {
if (n % i == 0) {
somme += i;
}
}
return somme == n;
}
Cette fonction prend en paramètre un entier n et retourne true si n est parfait, et false sinon. Elle utilise une boucle pour calculer la somme des diviseurs propres de n, et vérifie ensuite si cette somme est égale à n. Si c'est le cas, alors n est parfait.
Exercice 03 :
#include <iostream>
#include <string>
using namespace std;
class Etudiant {
private:
int matricule;
string monEtud;
int nbrNotes;
float* tabNotes;
public:
Etudiant() {
matricule = 0;
monEtud = "";
nbrNotes = 0;
tabNotes = NULL;
}
Etudiant(int mat, string nom, int nbNotes) {
matricule = mat;
monEtud = nom;
nbrNotes = nbNotes;
tabNotes = new float[nbrNotes];
}
Etudiant(const Etudiant& e) {
matricule = e.matricule;
monEtud = e.monEtud;
nbrNotes = e.nbrNotes;
tabNotes = new float[nbrNotes];
for (int i = 0; i < nbrNotes; i++) {
tabNotes[i] = e.tabNotes[i];
}
}
~Etudiant() {
if (tabNotes != NULL) {
delete[] tabNotes;
}
}
int getMatricule() const {
return matricule;
}
string getNom() const {
return monEtud;
}
int getNbrNotes() const {
return nbrNotes;
}
void setMatricule(int mat) {
matricule = mat;
}
void setNom(string nom) {
monEtud = nom;
}
void setNbrNotes(int nbNotes) {
nbrNotes = nbNotes;
if (tabNotes != NULL) {
delete[] tabNotes;
}
tabNotes = new float[nbrNotes];
}
void saisie() {
cout << "Saisie des notes pour l'etudiant " << monEtud << " (matricule " << matricule << ")" << endl;
for (int i = 0; i < nbrNotes; i++) {
cout << "Note " << i + 1 << " : ";
cin >> tabNotes[i];
}
}
void affichage() const {
cout << "Etudiant " << monEtud << " (matricule " << matricule << ") : ";
for (int i = 0; i < nbrNotes; i++) {
cout << tabNotes[i] << " ";
}
cout << endl;
}
float moyenne() const {
float sum = 0;
for (int i = 0; i < nbrNotes; i++) {
sum += tabNotes[i];
}
return sum / nbrNotes;
}
bool admis() const {
return (moyenne() >= 10);
}
bool compare(const Etudiant& e) const {
return (moyenne() == e.moyenne());
}
};
int main() {
Etudiant etud1(1, "Alice", 3);
Etudiant etud2(2, "Bob", 4);
etud1.saisie();
etud2.saisie();
etud1.affichage();
etud2.affichage();
cout << "Moyenne etudiant 1 : " << etud1.moyenne() << endl;
cout << "Moyenne etudiant 2 : " << etud2.moyenne() << endl;
if (etud1.admis()) {
cout << "Etudiant 1 admis" << endl;
}