Chap 11 – Les classes
Chapitre 11 — Les classes
Chapitre 11 — Les classes
Organiser un projet C++
Jusqu’à présent, tous les programmes de cet ouvrage étaient contenus dans un seul fichier source. Cette organisation
est parfaitement adaptée à de petits exemples, mais elle devient rapidement difficile à maintenir lorsque les programmes prennent de l’importance.
Imaginons par exemple un projet contenant plusieurs milliers de lignes de code. Regrouper toutes les fonctions, toutes
les structures et toutes les classes dans un unique fichier rendrait le programme difficile à lire, à modifier et à maintenir.
Pour cette raison, un projet C++ est généralement réparti entre plusieurs fichiers, chacun ayant un rôle bien précis.
Dans cette organisation,
• main.cpp contient la fonction main() ainsi que le déroulement général du programme.
• Date.h contient la déclaration de la classe Date.
• Date.cpp contient la définition des fonctions membres de cette classe.
Cette organisation n’est pas imposée par le langage C++, mais elle est devenue un standard dans la plupart
des projets, car elle facilite la lecture, la maintenance et la réutilisation du code.
Les fichiers d’en-tête
Lorsqu’un projet comporte plusieurs fichiers source, ceux-ci doivent pouvoir connaître les structures, les classes et les
fonctions définies dans les autres fichiers.
Les fichiers d’en-tête, dont l’extension est généralement .h, ont précisément pour rôle de mettre ces informations à
disposition des autres fichiers du projet.
Un fichier d’en-tête contient principalement des déclarations, c’est-à-dire les informations nécessaires pour utiliser un
type ou une fonction, sans en donner les détails d’implémentation.
Par exemple, le fichier Date.h peut contenir la déclaration suivante :
void afficher() const;
À ce stade, seule la déclaration de la fonction afficher() est connue. Son code sera écrit dans un fichier source
distinct nommé Date.cpp.
AccueilChapitre 11 — Les classes Le fichier main.cpp connaît ainsi l’existence de la classe Date grâce au fichier Date.h. Lorsque la fonction afficher() est appelée, son code est recherché dans le fichier Date.cpp lors de l’édition des La réalisation d’un programme C++ se déroule en plusieurs étapes : • les fichiers source (.cpp) sont d’abord compilés individuellement ; • cette compilation produit des fichiers objets ; • ces fichiers objets sont ensuite réunis lors de l’édition des liens (linking) afin de produire le programme Dans ce chapitre, nous utiliserons simplement ce mécanisme sans entrer dans ses détails. Nous reviendrons plus loin sur chacune de ces étapes et apprendrons notamment à automatiser la compilation à l’aide de Makefiles. • Un fichier d’en-tête contient les déclarations nécessaires pour utiliser une structure, une classe ou une • Les définitions correspondantes sont généralement placées dans un fichier source (.cpp) distinct. Les fichiers d’en-tête ne sont pas réservés aux classes. Ils peuvent également contenir des déclarations de fonctions, de structures, d’énumérations, de constantes ou d’alias de types (typedef ou using). Les fichiers source, dont l’extension est généralement .cpp, contiennent les définitions des fonctions et des méthodes déclarées dans les fichiers d’en-tête. Ils renferment donc le code réellement exécuté par le programme. Le fichier Date.cpp peut par exemple contenir la définition de la fonction afficher() déclarée dans Date.h. void Date::afficher() const std::cout << « … » << std::endl; La déclaration de la fonction est placée dans Date.h, tandis que son implémentation est écrite dans Date.cpp. 1. L’édition des liens (ou linking en anglais) est l’étape qui suit la compilation. Elle consiste à rassembler les différents fichiers objets produits par le compilateur afin de former un unique programme exécutable. Nous étudierons ce mécanisme plus en détail dans un chapitre consacré à la compilation des projets C++. La réalisation d’un programme C++ se déroule en plusieurs étapes : • les fichiers source (.cpp) sont d’abord compilés individuellement ; • cette compilation produit des fichiers objets ; • ces fichiers objets sont ensuite réunis lors de l’édition des liens (linking) afin de produire le programme exécutable. Dans ce chapitre, nous utiliserons simplement ce mécanisme sans entrer dans ses détails. Nous reviendrons plus loin sur chacune de ces étapes et apprendrons notamment à automatiser la compilation à l’aide de Makefiles.
AccueilChapitre 11 — Les classes Cette séparation facilite la lecture du programme et permet de répartir le travail entre plusieurs fichiers. • Les fichiers d’en-tête (.h) contiennent principalement les déclarations. • Les fichiers source (.cpp) contiennent les définitions correspondantes. Notre première classe Jusqu’à présent, nous avons utilisé des structures pour regrouper des données et des fonctions indépendantes pour les manipuler. Par exemple, nous avons défini une structure Date ainsi qu’une fonction permettant de l’afficher. void afficher(const Date& d) std::cout << d.jour << « / » << d.annee << std::endl; Cette organisation fonctionne parfaitement. Cependant, une question se pose naturellement. Pourquoi la fonction afficher() est-elle écrite à l’extérieur de la structure alors qu’elle manipule exclusivement des objets de type Date ? Ne serait-il pas plus naturel de regrouper les données et les fonctions qui les manipulent au Les fonctions afficher(), ajouterJour() ou encore estBissextile() manipulent toutes des objets de Où serait-il le plus logique de les placer ? La réponse à cette question est l’une des idées fondamentales de la programmation orientée objet. Une classe permet de regrouper dans une même entité les données et les fonctions qui les manipulent. Une classe peut ainsi être considérée comme une évolution naturelle des structures étudiées jusqu’à présent. void afficher() const;
AccueilChapitre 11 — Les classes On remarque que la fonction afficher() fait désormais partie de la classe. Elle est appelée une fonction membre (ou simplement méthode) de la classe. Voilà les 3 fichiers de notre programme à ce point de son développement. void afficher() const; void Date::afficher() const std::cout << jour << « / » << annee << std::endl; aujourdHui.jour = 31; aujourdHui.mois = 7; aujourdHui.annee = 2026; aujourdHui.afficher(); et sa structure dans son dossier
Accueilcpp-Chap11- Chapitre 11 — Les classes
AccueilChapitre 11 — Les classes
AccueilTermes à ajouter au glossaire