Questions de Cours :
- La notion de classe et la notion d'objet sont deux concepts fondamentaux en programmation orientée objet. Une classe est une description générale d'un objet, qui définit ses caractéristiques et ses comportements. Un objet, quant à lui, est une instance concrète d'une classe. En d'autres termes, une classe est une abstraction de l'objet, tandis qu'un objet est une instance concrète de cette abstraction.
- (a) Une variable de classe est une variable qui est partagée par toutes les instances d'une classe. (b) Une variable d'instance est une variable qui est propre à chaque instance d'une classe. (c) Une méthode de classe est une méthode qui agit sur les variables de classe et n'a pas accès aux variables d'instance. (d) Une méthode d'instance est une méthode qui agit sur les variables d'instance. (e) Un constructeur est une méthode spéciale qui est appelée lors de la création d'une nouvelle instance d'une classe. (f) Un accesseur en modification (ou mutateur) est une méthode qui permet de modifier la valeur d'une variable d'instance. (g) Un accesseur en consultation (ou accesseur) est une méthode qui permet de consulter la valeur d'une variable d'instance. (h) Une instance d'une classe est un objet créé à partir de cette classe.
- Lorsqu'une méthode est déclarée publique, cela signifie qu'elle est accessible à partir de n'importe quelle autre classe. En d'autres termes, la méthode peut être appelée à partir de n'importe où dans le programme, y compris à partir d'autres classes.
- Lorsqu'une méthode est déclarée privée, cela signifie qu'elle n'est accessible qu'à partir de la classe dans laquelle elle est définie. En d'autres termes, la méthode ne peut pas être appelée à partir d'autres classes.
- Lorsqu'une variable d'instance ou de classe est déclarée publique, cela signifie qu'elle est accessible à partir de n'importe quelle autre classe. En d'autres termes, la variable peut être lue ou modifiée à partir de n'importe où dans le programme, y compris à partir d'autres classes. Cependant, il est considéré comme une bonne pratique de ne pas rendre les variables publiques, mais plutôt d'utiliser des accesseurs en consultation et en modification pour contrôler l'accès à ces variables.
Probleme :
#include <iostream>
#include <string>
using namespace std;
class Docteur {
private:
int matricule;
string nomDocteur;
string specialite;
int experience;
int nombreDePatients;
public:
// Constructeurs
Docteur() : matricule(0), nomDocteur(""), specialite(""), experience(0), nombreDePatients(0) {}
Docteur(int m, string nom, string spe, int exp, int nb) : matricule(m), nomDocteur(nom), specialite(spe), experience(exp), nombreDePatients(nb) {}
Docteur(const Docteur& doc) : matricule(doc.matricule), nomDocteur(doc.nomDocteur), specialite(doc.specialite), experience(doc.experience), nombreDePatients(doc.nombreDePatients) {}
// Destructeur
~Docteur() {}
// Getters et Setters
int getMatricule() const { return matricule; }
string getNomDocteur() const { return nomDocteur; }
string getSpecialite() const { return specialite; }
int getExperience() const { return experience; }
int getNombreDePatients() const { return nombreDePatients; }
void setMatricule(int m) { matricule = m; }
void setNomDocteur(string nom) { nomDocteur = nom; }
void setSpecialite(string spe) { specialite = spe; }
void setExperience(int exp) { experience = exp; }
void setNombreDePatients(int nb) { nombreDePatients = nb; }
// Méthodes
void saisie() {
cout << "Entrez les informations du docteur : " << endl;
cout << "Matricule : "; cin >> matricule;
cout << "Nom : "; cin >> nomDocteur;
cout << "Spécialité : "; cin >> specialite;
cout << "Expérience : "; cin >> experience;
cout << "Nombre de patients traités : "; cin >> nombreDePatients;
}
void affichage() {
cout << "Informations du docteur : " << endl;
cout << "Matricule : " << matricule << endl;
cout << "Nom : " << nomDocteur << endl;
cout << "Spécialité : " << specialite << endl;
cout << "Expérience : " << experience << " an(s)" << endl;
cout << "Nombre de patients traités : " << nombreDePatients << endl;
cout << "Salaire mensuel : " << salaire() << " euros" << endl;
}
double salaire() {
double salaireMensuel = 2500.0;
salaireMensuel += experience * 100.0;
salaireMensuel += specialite == "chirurgie" ? 500.0 : 0.0;
salaireMensuel += specialite == "cardiologie" ? 500.0 : 0.0;
salaireMensuel += specialite == "neurologie" ? 500.0 : 0.0;
return salaireMensuel;
}
bool compare(const Docteur& doc) {
return salaire() == doc.salaire();
}
};
int main() {
Docteur doc1, doc2;
doc1.affichage(); // affiche les informations par défaut de doc1 (valeurs initialisées par défaut)
doc2.affichage(); // affiche les informations par défaut de doc2 (valeurs initialisées par défaut)
doc1.saisie(); // saisie les informations du docteur 1
doc2.saisie(); // saisie les informations du docteur 2
doc1.affichage(); // affiche les informations du docteur 1
doc2.affichage(); // affiche les informations du docteur 2
if (doc1.compare(doc2)) {
cout << "Les deux docteurs ont le meme salaire." << endl;
} else {
cout << "Les deux docteurs n'ont pas le meme salaire." << endl;
}
return 0;