C++ : Notion de classe Les classes sont des modèles d'objets qui en définissent : les attributs (aspect statique, données) les méthodes (aspect dynamique, traitements) ATTRIBUTS Classe METHODES Faites la question 17 1/19
C++ : la déclaration Syntaxe de la déclaration Analogue à celle des structures en C class Nom_class { private :... membres privés (attributs et méthodes) public :... membres publics (attributs et méthodes) }; Faites la question 18 2/19
C++ exemple de déclaration class CPoint { private : int x; int y; public : void initialise(int,int); void affiche(); }; Point.h Point.cpp void CPoint::initialise(int a,int b) { x=a; y=b;} void CPoint::affiche() { cout<<"ma position est "<<x<<","<<y<<endl; } Faites les questions 19 et 20 3/19
C++ : les classes et les objets Les objets sont des instances (exemplaires) de classe Ils peuvent être créés : statiquement : dans le code du programme dynamiquement : en cours d'exécution avec l'utilisation de pointeur et de l'opérateur d'allocation mémoire new 4/19
C++ : instance de classe Exemple d instanciation statique: en utilisant la classe CPoint déclaration et instanciationde deux points p1 et p2 CPoint p1,p2; initialisation des deux points p1.initialise(0,0); p2.initialise(1,2); affichage des deux points p1.affiche(); p2.affiche(); Répondez aux questions 21 à 24 5/19
C++ : portée des membres Modificateur Public : Private : Protected : description Le membre est utilisable partout dans l'application. Le membre est utilisable uniquement par des fonctions membres et amies de la classe dans laquelle il est déclaré. Même chose que private. Il est également utilisable par les fonctions membres et amies des classes dérivées et dans les objets de type dérivé. 6/19
C++ : pointeur this Moyen d accéder à l'objet courant C'est un pointeur Comment accéder à un attribut de la classe article à l'aide de this? Quel intéret d'utiliser this? 7/19
C++ la construction d objet Les constructeurs permettent la création, l'initialisation et la copie des objets d'une classe. Ils peuvent être implicites ( non définis par le programmeur ) ou explicite Le constructeur porte le nom de la classe Il est appelée automatiquement lors de la définition d'une nouvelle instance de l'objet. 8/19
C++ constructeurs suite Constructeur implicite : constructeur par défaut pas de paramètre Constructeur explicite : il est déclaré et défini explicitement les paramètres lui sont passés sous forme d arguments Comment sait-on qu'une classe utilise un constructeur implicite? 9/19
C++ exemple de constructeurs Point.h class CPoint { private: int x; int y; public: point() ; point (int x_init,int y_init) ; point (double x_reel_init, double y_reel_init) ; }; CPoint :: CPoint() { x=0; y=0; } CPoint :: CPoint (int x_init,int y_init) { x=x_init; y=y_init; ) } Point.cpp CPoint ::CPoint (double x_reel_init, double y_reel_init) { x = (int) x_reel_init; y = (int) y_reel_init; } 10/19
C++ constructeur : la liste d'initialisation Permet d'initialiser directement les attributs lors de leur création Débute par le signe deux points (:) et chaque élément est séparé par une virgule Peut appeler constructeur parent Ne peut pas réaliser de code à exécuter Se place entre la parenthèse fermante du constructeur et L'accolade ouvrante du corps du constructeur 11/19
C++ constructeur : la liste d'initialisation exemple /* Il est impossible d'initialiser pelage dans la liste car il demande une allocation dynamique */ chat::chat (float t, float p, const char *pel) : taille(t), poids(p) { strcpy(pellage, pel); cout<<"le chat naît donc un jour il mourra...:))"; } class chat { public: float taille, poids; char pellage[10]; chat(float t, float p,const char *pel); chat(); ~chat(void); } 12/19
C++ Le constructeur copie Ce constructeur fabrique un nouvel objet comme clone d'un objet existant Il a pour paramètre une référence constante sur l'objet à copier Pourquoi la référence doit-elle être constante? 13/19
C++ Le constructeur copie (2) class Chat { public: float taille, poids; char pellage[10]; Chat(float t, float p, char *pel); Chat(const Chat &chatorigine); Chat(); ~Chat(void); } Void testchat() { Chat monchat(40, 2,12, «Chat botté»); Chat autre = monchat; } Faites les question 25 et 26? /* copie de tous les attributs de chat origine */ Chat::Chat (const Chat &chatorigine) :taille(chatorigine.taille), poids(chatorigine.poids) { strcpy(pellage, chatorigine.pellage); cout<<"le chat naît donc un jour il mourra..."; } 14/19
Copie ou affectation L'affectation d'un objet d'une classe donnée à un objet de cette même classe est possible en C++. Tous les membres (privés et publics) sont alors recopiés exemple : point p1, p2; p1.initialise(1,1); p2 = p1; //???? Point p3 = p1; //???? Comment reconnait-on une copie d'une affectation? Complétez les commentaires 15/19
C++ exemple d instanciation Exemples : point p1; point p2 (10, 20); point p3 (2.0, 5.0); point *p_point=new point(10,5); point *tab_points=new point[10]; 16/19
C++ destructeur d objet Pour détruire un objet appartenant à une classe, on fait appel à un destructeur d'objets associé à la classe Les objets sont détruits : soit implicitement (portée d'une déclaration) soit explicitement par l'opérateur delete dans les deux cas le destructeur est appelé 17/19
C++ exemple de destructions Lorsqu'un objet de la classe point est détruit, le destructeur adapté est appelé. Contrairement aux constructeurs, il n'existe qu'une méthode de destruction d'un objet. point p1 (1.0,5.0); point *p_point=new point(); point *tab_point=new point[10]; applic.cpp // l'objet p1 sera détruit en quittant son bloc de déclaration delete p_point; // Détruit l'objet pointé par p_point delete[] tab_point; // Détruit le tableau tab_point 18/19
C++ le destructeur Le destructeur est une fonction membre portant le même nom que la classe. cette fonction est précédée du signe ~. Elle n'a pas de paramètre et n'est pas typée. Un destructeur implicite existe si l'utilisateur n'en a pas déclaré class point { private: int x; int y; public: ~point() }; Point::~point() { } Répondez à la question 27 19/19