Classes héritage
https://www.labri.fr/perso/bourqui/downloads/cours/AP2/support-C%2B%2B-classes.pdf
C++ : PROGRAMMATION-OBJET
Apparue au début des années 70 la programmation orientée objet répond aux nécessités de l'informatique professionnelle. Elle offre aux concepteurs de
La programmation orientée objet (POO) en C++ Première partie
Un programme Orienté Objet est écrit à partir d'un langage Orienté. Objet. Les langages O.O. les plus utilisés sont : C++ C#
Cours Langage C/C++ - Classes et objets Programmation Orienté
Classes et objets. Les classes sont les éléments de base de la programmation orientée objet (POO) en C++. Dans une classe on réunit :.
Programmation orientée objet & autres concepts illustrés en C++ et
Eric Lecolinet - Télécom ParisTech - Programmation orientée objet et autres concepts illustrés en C++11. ? C/C++ : compilé en code machine natif.
La programmation orientée objet (POO) en C++ Quatrième partie
La programmation orientée objet (POO) en C++. Quatrième partie : Héritage et polymorphisme. Thierry Vaira. BTS SN Option IR v.1.1 - 5 octobre 2018
Cours Langage C++ : Héritage et polymorphisme Programmation
Les classes sont les éléments de base de la programmation orientée objet (POO) en C++. Dans une classe on réunit : - des données variables : les données
La programmation orientée objet (POO) en C++ Deuxième partie
statiques car ceux-ci existent même lorsque aucun objet de cette classe n'a été créé. Thierry Vaira (BTS SN-IR Avignon). La POO en C++ (Part. II).
CONTENU DU COURS
d'acquérir les bases de la modélisation et de la programmation orientées objet. Le langage C++ est pris comme exemple. Avertissement : Ce cours suppose la
La programmation orientée objet (POO) en C++ Troisième partie
La programmation orientée objet (POO) en C++. Troisième partie : Les relations entre classes. Thierry Vaira. BTS SN Option IR v.1.2 - 7 décembre 2020
Cours Langage C/C++ - Classes et objets
Programmation Orienté Objet
Thierry Vaira
BTS IRIS Avignon
tvaira@free.fr?v0.1Sommaire
1Classes et objets
2Les objets constants
3Surcharge des opérateurs
4L"héritage
5Les exceptions
6Polymorphisme
7Transtypage
tv (BTS IRIS Avignon)Cours C/C++tvaira@free.fr?v0.1 2 / 69Classes et objets
Classes et objets
Les classes sont les éléments de base de laprogrammation orientée objet (POO)en C++. Dans une classe, on réunit : - des données variables : les données memb res,ou les attributsde la classe. - des fonctions :les fonctions memb res,ou les méthodesde la classe.Une classeAapporte un nouveau typeAajouté aux types (pré)définis
de base par C++.Une variableacréée à partir du type de classeAest appeléeinstance (ouobjet) de la classe A.Exemple (non compilable*) : class A; //déclare une classe A (* car elle n "estpas définie )A a1;//instancie un objet a1 de type A
A a2;//crée une instance a2 de type A tv (BTS IRIS Avignon)Cours C/C++tvaira@free.fr?v0.1 3 / 69Classes et objets
État et comportement
Une classe sedéclare dans un fichier.h. La déclaration permet de connaître les types des choses constituant la classe, et ainsi de l"utiliser.Une classe sedéfinit dans un fichier.ccou.cpp. La définitionpermettra de fabriquer les choses constituant la classe.Un objet possédera uneidentitéqui permet de distinguer un objet
d"un autre objet (son nom, une adresse mémoire).Un objet possédera unétat(les valeurs contenues dans les attributs
propres à cet objet).Un objet possédera uncomportement(l"utilisation de ses méthodes lui fera changer d"état). tv (BTS IRIS Avignon)Cours C/C++tvaira@free.fr?v0.1 4 / 69Classes et objets
Droits d"accès aux membres (1/2)
Les droits d"accès aux membres d"une classe concernent aussi bien les méthodes que les attributs.En C++, on dispose des droits d"accès suivants : - Accèspublic:on p eututiliser le memb rede n"imp orteoù dans le p rogramme. - Accèsprivate:seule une fonction memb rede la mêm eclasse A p eututiliser ce membre; il est invisible de l"extérieur de A. - Accèsprotected:ce memb rep eutêtre utilisé pa run efonction de cette même classe A, et pas ailleurs dans le programme (ressemble donc à private), mais il peut en plus être utilisé par une classe B qui hérite de A.Il existe une règle de POO qui précise queles attributs doivent être encapsulées dans la classepour éviter une utilisation extérieure. C"est une forme de protection permettant d"éviter une utilisation incorrecte ou non prévue par le programmeur de la classe. On appliquera ce principe en déclarant l"ensemble des attributs en private.tv (BTS IRIS Avignon)Cours C/C++tvaira@free.fr?v0.1 5 / 69Classes et objets
Droits d"accès aux membres (2/2)
Si c"est nécessaire, l"accès aux attributs privés d"une classe se fera par l"intermédiaire de méthodes nommées desaccesseurs et manipulateurs. On a l"habitude de les nommerget()pour l"accèsen lecture etset()pour l"accès en écriture d"un attribut.Exemple (non compilable car les méthodes ne sont pas définies) :
class A private intx;//je suis un attribut privé de type int voidfoo();//je suis une méthode privée de nom foo public ://seulement des méthodes ici ( reglePOO ) intgetX();//je suis l "accesseurget de x ,je retourne sa valeur voidsetX(int);//je suis le manipulateur set de x ,je fixe sa valeur voidafficher();//je suis une autre méthode publique tv (BTS IRIS Avignon)Cours C/C++tvaira@free.fr?v0.1 6 / 69Classes et objets
Constructeur
Un constructeur est chargé d"initialiser une instance (objet) de la classe.Il est appeléautomatiquement au moment de la créationde l"objet.Un constructeur est uneméthode qui porte toujours le même nom que la classe.Il existe quelques contraintes : Il peut avoir des paramètres, et des valeurs par défaut. Il peut y avoir plusieurs constructeurs pour une même classe.Il n"a jamais de type de retour.
Il existe d"autres constructeurs : le constructeur par défaut et le constructeur de copie. tv (BTS IRIS Avignon)Cours C/C++tvaira@free.fr?v0.1 7 / 69Classes et objets
Destructeur
Le destructeur est laméthode membre appelée lorsqu"uneinstance (objet) de classe cesse d"exister en mémoire.Son rôle est delibérer toutes les ressources qui ont été acquises
lors de la construction(typiquement libérer la mémoire qui a étéallouée dynamiquement par cet objet).Un destructeur est uneméthode qui porte toujours le même nom
que la classe, précédé de "~".Il existe quelques contraintes :Il ne possède aucun paramètre.
Il n"y en a qu"un et un seul.
Il n"a jamais de type de retour.
Voilà, on sait suffisamment de choses pour écrire notre première classe et instancier nos premiers objets. tv (BTS IRIS Avignon)Cours C/C++tvaira@free.fr?v0.1 8 / 69Classes et objets
Déclaration d"une classePointdans un fichierpoint.h//Une classe apporte un nouveau type : ici un Point .C "estdonc un modèle pour les futurs objets de type
Point Mon type Point possède des caractéristiques des propriétés une coordonnée entière x et une coordonnée entière y Mon type point peut faire des choses des opérations il est capable d afficher ses coordonnées class Point private int_x, _y; publicPoint(int,int);//je suis le constructeur
~Point();//je suis le destructeur intgetX(); voidsetX(int); intgetY(); voidsetY(int); voidafficher(); };tv (BTS IRIS Avignon)Cours C/C++tvaira@free.fr?v0.1 9 / 69Classes et objets
Définition des membres de la classe Point dans un fichierpoint.cc#include< iostream>// j "utilisecout
include point h il me faut la déclaration de la classe Point using namespacestd;//utile ! je definis la méthode Point donc le constructeur ici de la classe Point pour que le compilateur comprenne et la trouve j utilise l opérateur de résolution de portéePoint::Point(intx,inty) {
cout << "Appel du constructeur Point : j"initialise les membres privés x et y" << endl; _x = x; _y = y;Point::~Point() {
cout << "Appel du destructeur ~Point : j"ai rien à faire" << endl; intPoint::getX() { return_x; voidPoint::setX(intx) { _x = x; intPoint::getY() { return_y; voidPoint::setY(inty) { _y = y; voidPoint::afficher() { cout << _x << "," << _y << endl; }tv (BTS IRIS Avignon)Cours C/C++tvaira@free.fr?v0.1 10 / 69Classes et objets
Un programme d"essai dans un fichiermain.cc#include< iostream>// j "utilisecout include point h il me faut la déclaration de la classe Point using namespacestd;//utile ! intmain() Point pointA(0,0);//j "instancieun objet pointA de type Point Point pointB(1,2);//ou je crée une instance pointB de type Point pointA.afficher();//j "appellela méthode publique afficher ()de l "objetpointA pointB.afficher();//chaque objet possède ses propres attributs pointB _y 1; interdit car l attribut _y est privé donc pointB.setY(1);//je modifie la valeur de l "attribut_y de pointB pointB.afficher(); return0; }tv (BTS IRIS Avignon)Cours C/C++tvaira@free.fr?v0.1 11 / 69Classes et objets
Fabrication de l"exécutablea.out(sous Linux)$ g++ -c point.cc $ g++ -c main.cc $ ls *.o main.o point.o $ g++ main.o point.o ou en une seule ligne $ g++ main.cc point.ccExécution du programme d"essai Appel du constructeur Point : j"initialise les membres privés x et y Appel du constructeur Point : j"initialise les membres privés x et y 0,0 1,2 1,1 Appel du destructeur ~Point : j"ai rien à faire Appel du destructeur ~Point : j"ai rien à faire tv (BTS IRIS Avignon)Cours C/C++tvaira@free.fr?v0.1 12 / 69Classes et objets
new et deletePour allouer dynamiquement en C++, on utilisera l"opérateurnew.Celui-ci renvoyant une adresse où est crée la variable en question, il
nous faudra un pointeur pour la conserver.Manipuler ce pointeur, reviendra à manipuler la variable allouée
dynamiquement.Pour libérer de la mémoire allouée dynamiquement en C++, on utilisera l"opérateurdelete.tv (BTS IRIS Avignon)Cours C/C++tvaira@free.fr?v0.1 13 / 69Classes et objets
Pour allouer dynamiquement unobjet, on utilisera l"opérateurnew.Exemple : allocation dynamique d"un objet
include iostream include point h using namespacestd; intmain() Point *pointC;//je suis pointeur sur un objet de type Point pointC =newPoint(2,2);//j "allouedynamiquement un objet de type PointpointC->afficher();//Comme pointC est une adresse ,je dois utiliser l "opérateur-> pour accéder aux
membres de cet objet pointC->setY(0);//je modifie la valeur de l "attribut_y de pointB(*pointC).afficher();//cette écriture est possible : je pointe l "objetpuis j "appellesa méthode
afficher deletepointC;//ne pas oublier de libérer la mémoire allouée pour cet objet return0; }tv (BTS IRIS Avignon)Cours C/C++tvaira@free.fr?v0.1 14 / 69Classes et objets
Cas particuliers
Un programme d"essai qui pose problème!
include iostream include point h using namespacestd; intmain() Point pointA;//déclaration d "unobjet pointD sans coordonnées ( quefaut -ilfaire ?) tableauDe10Points[10];//déclaration d "untableauDe10Points contenant 10 objets de type PointPoint pointE();//que fait cette ligne ?
return0; }tv (BTS IRIS Avignon)Cours C/C++tvaira@free.fr?v0.1 15 / 69Classes et objets
Rappel : paramètres par défaut
Le langage C++ offre la possibilité d"avoir des valeurs par défaut pour les paramètres d"une fonction (ou d"une méthode), qui peuvent alors être sous-entendus au moment de l"appel.intmult(inta=2,intb=3) { returna*b; mult(3,4);//donne 12 mult(3);//équivaut à mult (3,3)qui donne 9mult();//équivaut à mult (2,3)qui donne 6 Remarque : cette possibilité, permet d"écrire qu"un seul constructeur
profitant du mécanisme de valeur par défaut. tv (BTS IRIS Avignon)Cours C/C++tvaira@free.fr?v0.1 16 / 69Classes et objets
Constructeur par défaut (1/4)
Deux constructeurs sont toujours nécessaires dans toute nouvelleclasse : leconstructeur par défautet leconstructeur de copie.Ils sont tellement importants que si vous ne les écrivez pas, le
compilateur tentera de le faire à votre place ... mais à moins de savoirexactement ce que vous faites il vaut mieux les écrire soi-même.Le rôle du constructeur par défaut est de créer une instance non
initialisée quand aucun autre constructeur fourni n"est applicable.Par exemple, le constructeur par défaut de notre classePointsera :Point::Point() {}//Sans aucun paramètre ! tv (BTS IRIS Avignon)Cours C/C++tvaira@free.fr?v0.1 17 / 69
Classes et objets
Constructeur par défaut (2/4)
Si on essaye de compiler les déclarations suivantes : Point pointD;//un pointD sans coordonnées ( quefaut -ilfaire ?) Point tableauDe10Points[10];//typiquement : les cases d "untableau de Point pointA.afficher();tableauDe10Points[0].afficher();//le premier objet Point du tableau On obtient des erreurs en provenance du compilateur :
ligne 8: erreur: no matching functionforcall to Point::Point()" ligne 9: erreur: no matching function for call to Point::Point()" tv (BTS IRIS Avignon)Cours C/C++tvaira@free.fr?v0.1 18 / 69Classes et objets
Constructeur par défaut (3/4)
Le compilateur n"a pas trouvé de constructeur par défaut dans notreclasse, il faut donc le déclarer et le définir.Définition d"un constructeur par défaut sans argument :
Point::Point() { _x=0; _y=0; }
Maintenant, le programme précédent se compile et le constructeur par défaut sera appelé pour l"objetpointAet 10 fois pour chaque objetPoint du tableau. tv (BTS IRIS Avignon)Cours C/C++tvaira@free.fr?v0.1 19 / 69Classes et objets
Constructeur par défaut (4/4)
Le constructeur par défaut est donc un constructeursans argumentouavec des arguments qui possèdent une valeur par défaut.Déclaration d"un constructeur par défaut avec arguments :
Point(int_x=0,int_y=0);Définition d"un constructeur par défaut avec arguments :Point::Point(int_x/*=0*/,int_y/*=0*/) {}Le constructeur par défaut est nécessaire notamment dans : la création de
tableaux d"objet, la fabrication d"objets temporaires et l"agrégation par valeur des objets. tv (BTS IRIS Avignon)Cours C/C++tvaira@free.fr?v0.1 20 / 69Classes et objets
Liste d"initialisation
Un meilleur moyen d"affecter des valeurs lors de la construction auxdonnées membres de la classe est laliste d"initialisation.Dans le fichier .cc, il suffit d"utiliser la syntaxe suivante :
Point::Point(intx,inty) : _x(x), _y(y)//c "estla liste d "initialisation{/*il n "ya rien d "autreà faire */ }La liste d"initialisation permet d"utiliser le constructeur de chaque
donnée membre, et ainsi d"éviter une affectation après coup.la liste d"initialisation doit être utilisée pour certains objets qui ne
peuvent pas être contruits par défaut : c"est le cas des références et des objets constants.Important : l"ordre d"initialisation des membres doit correspondre à celui de leurs déclarations dans le fichier .h. tv (BTS IRIS Avignon)Cours C/C++tvaira@free.fr?v0.1 21 / 69Classes et objets
Le pointeur spécial d"instance :thisDans certaines conditions particulières, il est nécessaire de disposer
d"un moyen de désigner depuis l"intérieur d"une fonction membre, non pas les données membres, mais l"instance elle-même de la classe surquotesdbs_dbs48.pdfusesText_48[PDF] Origami urgent
[PDF] origin of english language pdf
[PDF] origine agriculture
[PDF] origine alimentaire
[PDF] origine commune des êtres vivants
[PDF] Origine commune svt
[PDF] origine crise de cuba
[PDF] origine d'un séisme
[PDF] Origine de Électricité consommée
[PDF] origine de l économie collaborative
[PDF] origine de l'islam
[PDF] origine de la chaleur de la terre
[PDF] origine de la diversité des êtres humains
[PDF] Origine de la fete des morts au Mexique