60
Fabio Hernandez [email protected] Programmation Orientée Objet en C++ Programmation Orientée Objet en C++ 8ème Partie: Objets et Classes 8ème Partie: Objets et Classes

Objets et classes C++

Embed Size (px)

DESCRIPTION

Objets et classes C++

Citation preview

  • Fabio [email protected]

    Programmation Oriente Objet en C++Programmation Oriente Objet en C++

    8me Partie: Objets et Classes8me Partie: Objets et Classes

  • 1997-2003 Fabio HERNANDEZ197POO en C++: Objets et Classes

    Vue d'EnsembleVue d'Ensemble

    } Notions de base } Types, variables, oprateurs} Contrle d'excution} Fonctions} Mmoire dynamique} Qualit du logiciel} Evolution du modle objet } Objets et classes} Fonctions membres} Classes gnriques} Hritage} Polymorphisme} Hritage multiple} Entre/sortie

  • 1997-2003 Fabio HERNANDEZ198POO en C++: Objets et Classes

    Table des MatiresTable des Matires

    } Nature d'un Objet} Nature d'une Classe} Exemple: une classe simple

    abstraction dfinition de l'interface utilisation implmentation modification fonction membres contrle d'accs initialisation/destruction

    } Rsum

  • 1997-2003 Fabio HERNANDEZ199POO en C++: Objets et Classes

    Nature d'un ObjetNature d'un Objet

    } Un objet reprsente une entit individuelle et identifiable, relle ou abstraite, avec un rle bien dfini dans le domaine duproblme

    } Exemple: dans une usine de fabrication d'automobiles, on peut identifier des objets tels moteur chssis volant systme lectrique processus de montage

    } Des objets peuvent tre tangibles, mais peuvent ne pas avoir une frontire physique trs bien dfinie (rivire, des nuages, ...)

  • 1997-2003 Fabio HERNANDEZ200POO en C++: Objets et Classes

    Nature d'un Objet (suite)Nature d'un Objet (suite)

    } Caractristiques d'un objet Etat Comportement Identit

    } Etat un attribut est une caractristique, qualit ou trait intrinsque qui

    contribue faire unique un objet l'tat d'un objet comprend les proprits statiques (attributs) et les

    valeurs de ces attributs les valeurs des attributs peuvent tre statiques ou dynamiques du fait d'avoir un tat, un objet occupe un espace dans le monde

    physique et dans la mmoire de l'ordinateur exemple: les attributs de l'objet point en deux dimensions sont les

    coordonnes x et y

  • 1997-2003 Fabio HERNANDEZ201POO en C++: Objets et Classes

    Nature d'un Objet (suite)Nature d'un Objet (suite)

    } Comportement faon d'agir et de ragir d'un objet comme consquence des

    changements d'tat et des oprations effectues sur lui reprsente l'activit de l'objet vue de l'extrieur si on regarde un objet comme un serveur, son comportement est

    l'ensemble des services offerts par lui ses clients exemple: un point peut tre dplac, tourn autour d'un autre point, etc. le comportement dpend de l'tat de l'objet et de l'opration

    effectue sur lui l'tat d'un objet reprsente le rsultat cumul de son comportement

    } Identit proprit d'un objet qui permet de le distinguer des autres objets de la

    mme classe

  • 1997-2003 Fabio HERNANDEZ202POO en C++: Objets et Classes

    Nature d'une ClasseNature d'une Classe

    } Les notions de classe et d objet sont troitement lies} Une classe est un ensemble d'objets qui partagent une

    structure et un comportement communs} Une classe est seulement une abstraction} Un objet est une instance (entit concrte) d'une classe en

    temps d'excution} On peut voir la classe comme un moule pour la fabrication

    d'objets} Les objets fabriqus avec le mme moule partagent structure

    et comportement

  • 1997-2003 Fabio HERNANDEZ203POO en C++: Objets et Classes

    Nature d'une Classe (suite)Nature d'une Classe (suite)

    } Deux vues d'une classe interface implmentation

    } Interface vue externe abstraite d'une classe liste de services offerts par les instances de la classe (contrat) une opration non spcifie dans l'interface d'une classe ne peut tre

    applique sur une instance (objet) de cette classe cache la structure interne de la classe (encapsulation) rponse la question quoi contenue dans un fichier d'entte (.h)

  • 1997-2003 Fabio HERNANDEZ204POO en C++: Objets et Classes

    Nature d'une Classe (suite)Nature d'une Classe (suite)

    } Implmentation vue interne d'une classe comprend les secrets (dtails internes) de son comportement l'implmentation d'une classe est constitue de l'implmentation de

    chacune des oprations dfinies dans son interface rponse la question comment contenue dans un fichier d'implmentation (.cpp)

  • 1997-2003 Fabio HERNANDEZ205POO en C++: Objets et Classes

    Exemple: classe PointExemple: classe Point

    } Ecriture en C++ d'une classe (interface et implmentation) reprsentant la notion d'un point en deux dimensions

    O x

    y

  • 1997-2003 Fabio HERNANDEZ206POO en C++: Objets et Classes

    Classe Classe PointPoint: abstraction: abstraction

    } Quels sont les attributs d'un point qui nous intressent? la coordonne x la coordonne y la distance l'origine () l'angle par rapport l'horizontale ()

    } Quelles sont les oprations applicables sur un point qui nous intressent ? translation rotation autour de l'origine ...

  • 1997-2003 Fabio HERNANDEZ207POO en C++: Objets et Classes

    Classe Classe PointPoint : interface: interface

    } Dfinition (incomplte) de l'interface de la classe Point} Fichier Point.h

    class Point { // Not yet finished !!!public:

    float getX(); // returns the x coordinatefloat getY(); // returns the y coordinatefloat rho(); // returns the distance to the originfloat theta(); // returns the angle to the

    // horizontal axisvoid translate(float horizontal, float vertical);void rotate(float angle);

    };

  • 1997-2003 Fabio HERNANDEZ208POO en C++: Objets et Classes

    Classe Classe PointPoint : interface (suite): interface (suite)

    } getX, getY, rho, theta, translate et rotate sont des mthodes (services) fournies par toutes les instances de la classe Point

    } getX, getY, rho et theta retournent une valeur de typefloat

    } translate et rotate ne retournent rien} translate et rotate ont besoin d'information supplmentaire

    pour accomplir leur mission un dplacement horizontal et vertical, dans le cas de translate un angle, dans le cas de rotate

    } Y a-t-il des similarits avec la dclaration des fonctions, tudie prcdemment?

    } Le mot cl public sert contrler l'accs aux mthodes de la classe. Plus d'informations ce propos plus tard.

  • 1997-2003 Fabio HERNANDEZ209POO en C++: Objets et Classes

    Classe Classe PointPoint : utilisation: utilisation

    } Comment utiliser les services offerts par les objets de la classe Point? il faut dfinir un objet de cette classe et ensuite... lui envoyer un message indiquant le service que l'on demande

    } La dfinition de l'objet est faite de la mme faon que la dfinition des objets des types primitifs

    int count;Point p;

    } Pour envoyer le message indiquant le service demand on utilise la notation

    p.rotate(45.0);objet destinatairedu message

    service demand

    argument(s) du service

  • 1997-2003 Fabio HERNANDEZ210POO en C++: Objets et Classes

    Classe Classe PointPoint : utilisation (suite): utilisation (suite)

    } Utilisation d'objets de la classe Point (fichier main.cpp)#include #include "Point.h"

    void main(){

    // Instantiate a Point objectPoint p;

    // Show its coordinatescout

  • 1997-2003 Fabio HERNANDEZ211POO en C++: Objets et Classes

    Classe Classe PointPoint : utilisation (suite): utilisation (suite)

    // Show its anglecout

  • 1997-2003 Fabio HERNANDEZ212POO en C++: Objets et Classes

    Classe Classe PointPoint : utilisation (suite): utilisation (suite)

    } Lors de l'excution de ce programme, il devrait s'afficher l'cran

    p is (0.0,0.0)The angle theta of p is: 0.0p is now (10.0,20.0)

  • 1997-2003 Fabio HERNANDEZ213POO en C++: Objets et Classes

    Classe Classe PointPoint : utilisation (suite): utilisation (suite)

    } La dfinition de pointeurs aux objets d'une classe se fait de lamme faon que celle des pointeurs aux objets des types primitifs

    int* anIntPointer;Point* aPointPointer;

    } L'allocation de mmoire se fait l'aide de l'oprateur newanIntPointer = new int;aPointPointer = new Point;

    } L'envoi de messages, l'aide de l'oprateur ->aPointPointer->translate(10.0, 20.0);

    } La dsallocation, l'aide de l'oprateur deletedelete aPointPointer;

  • 1997-2003 Fabio HERNANDEZ214POO en C++: Objets et Classes

    Classe Classe PointPoint : implmentation: implmentation

    } Comment implmenter chacun des services spcifis dans le contrat (interface de la classe) ?

    } Tout d'abord, il faut dterminer les attributs qui constituerontl'tat d'un point, dans la perspective de notre abstraction

    } Nous allons reprsenter un point comme un couple (x,y)} Chacune des coordonnes est une valeur de type float} Les attributs reprsentant les coordonnes x et y s'appelleront x_ et y_ respectivement

    } Le caractre soulign de x_ et y_ est une convention de style} Les attributs x_ et y_ sont appels les donnes membres, par

    opposition aux fonctions membres ( getX, getY, rho, theta, translate, rotate) de la classe

  • 1997-2003 Fabio HERNANDEZ215POO en C++: Objets et Classes

    Classe Classe PointPoint : implmentation (suite): implmentation (suite)

    class Point { // Not yet finished !!!

    public:float getX(); // returns the x coordinatefloat getY(); // returns the y coordinatefloat rho(); // returns the distance to the originfloat theta(); // returns the angle to the

    // horizontal axisvoid translate(float horizontal, float vertical);void rotate(float angle);

    float x_; // x coordinate float y_; // y coordinate

    };

  • 1997-2003 Fabio HERNANDEZ216POO en C++: Objets et Classes

    Classe Classe PointPoint : implmentation (suite): implmentation (suite)

    } Notation quasi UML (Unified Modeling Language) http://www.rational.com/uml

    Point

    x_: floaty_: float

    getX: floatgetY: floatrho: floattheta: floattranslate: voidrotate: void

    Nom de la classeNom de la classe

    AttributsAttributs

    OprationsOprations

  • 1997-2003 Fabio HERNANDEZ217POO en C++: Objets et Classes

    Classe Classe PointPoint : implmentation (suite): implmentation (suite)

    } En temps d'excution// Create a point objectPoint p1;

    // Create another point objectPoint p2;

    p1: Point

    x_ = 0.0y_ = 0.0

    p2: Point

    x_ = 0.0y_ = 0.0

    p1: Point

    x_ = 0.0y_ = 0.0

    Deux instances diffrentes de la mmeclasse Point, avec les mmes valeurs dans leurs attributs

    Deux instances diffrentes de la mmeclasse Point, avec les mmes valeurs dans leurs attributs

  • 1997-2003 Fabio HERNANDEZ218POO en C++: Objets et Classes

    Classe Classe PointPoint : implmentation (suite): implmentation (suite)

    } En temps d'excution (suite)// Translate p1p1.translate(34.5, 18.8);

    // Now translate p2p2.translate(-10.0, 20.0);

    p1: Point

    x_ = 34.5y_ = 18.8

    p2: Point

    x_ = 0.0y_ = 0.0

    p1: Point

    x_ = 34.5y_ = 18.8

    p2: Point

    x_ = -10.0y_ = 20.0

  • 1997-2003 Fabio HERNANDEZ219POO en C++: Objets et Classes

    Classe Classe PointPoint : implmentation (suite): implmentation (suite)

    } Et si on utilise des pointeurs// Create a point pointerPoint* p1 = new Point;

    // Create another pointerPoint* p2 = p1;

    :Point

    x_ = 0.0y_ = 0.0

    Une seule instancede la mme classe Point, rfrence par deux pointeurs diffrents

    Une seule instancede la mme classe Point, rfrence par deux pointeurs diffrents

    p1

    :Point

    x_ = 0.0y_ = 0.0

    p1 p2

  • 1997-2003 Fabio HERNANDEZ220POO en C++: Objets et Classes

    Classe Classe PointPoint : implmentation (suite): implmentation (suite)

    } Et si on utilise des pointeurs (suite)// Translate the point pointed to by p1p1->translate(34.5, 18.8);

    // Now translate the point pointed to by p2p2->translate(-10.0, 20.0);

    :Point

    x_ = 34.5y_ = 18.8

    p1 p2

    :Point

    x_ = 24.5y_ = 38.8

    p1 p2

  • 1997-2003 Fabio HERNANDEZ221POO en C++: Objets et Classes

    Classe Classe PointPoint : implmentation (suite): implmentation (suite)

    } Nous pouvons maintenant implmenter chacune des fonctions membres de la classe

    } L'implmentation de ces fonctions sera crite dans un fichier de type .cpp

    } Nous crons ainsi le fichier Point.cpp

  • 1997-2003 Fabio HERNANDEZ222POO en C++: Objets et Classes

    Fichier Fichier Point.Point.cppcpp

    ///////////////////////////////////////////////////////// File: Point.cpp// Description: implementation of the Point class///////////////////////////////////////////////////////

    #include "Point.h"#include // we need sin(), cos(), sqrt()

    float Point::getX(){

    return x_;}

    float Point::getY(){

    return y_;}

  • 1997-2003 Fabio HERNANDEZ223POO en C++: Objets et Classes

    Fichier Fichier Point.Point.cppcpp (suite)(suite)float Point::rho(){

    return sqrt(x_*x_ + y_*y_);}

    float Point::theta(){

    return atan2(y_, x_);}

  • 1997-2003 Fabio HERNANDEZ224POO en C++: Objets et Classes

    Fichier Fichier Point.Point.cppcpp (suite)(suite)

    void Point::translate(float horizontal, float vertical){

    x_ += horizontal;y_ += vertical;

    }

    void Point::rotate(float angle){

    float currentRho = rho();float newTheta = theta() + angle;

    x_ = currentRho * cos(newTheta);y_ = currentRho * sin(newTheta);

    }

    Une fonctionmembre peut en appeler d'autresde la mme classe

    Une fonctionmembre peut en appeler d'autresde la mme classe

  • 1997-2003 Fabio HERNANDEZ225POO en C++: Objets et Classes

    Contrle d'accsContrle d'accs

    } Le mot cl public dans l'interface de la classe Point tablit pour un service (fonction membre), qu'il est utilisable par n'importe quel

    objet client pour un attribut (donne membre), qu'il est accessible (y compris pour le

    modifier) depuis n'importe quel autre objet} En particulier, nous pourrions faire

    // Instantiate a Point objectPoint p;

    // WARNING: its x attribute can be modified!!!!p.x_ = 47.0;

  • 1997-2003 Fabio HERNANDEZ226POO en C++: Objets et Classes

    Contrle d'accs (suite)Contrle d'accs (suite)

    } L'accs public n'est pas souhaitable principalement pour les attributs de la classe

    } Les donnes membres d'une classe font partie des secrets de l'implmentation et ne devraient donc pas tre accessibles en dehors de l'objet

    } Nous devrions pouvoir encapsuler ces attributs de faon ce que les clients de la classe ne puissent pas y accder directement

    } C++ offre plusieurs niveaux pour contrler l'accs aux fonctions/donnes membres public protg priv

  • 1997-2003 Fabio HERNANDEZ227POO en C++: Objets et Classes

    Contrle d'accs (suite)Contrle d'accs (suite)

    } Accs public Mot cl public Les fonctions/donnes membres sont accessibles par tous les objets

    } Accs protg Mot cl protected Etroitement li avec les mcanismes d'hritage L'accs est limit aux classes de la hirarchie Plus de dtails quand nous tudierons l'hritage

    } Accs priv Mot cl private Les fonctions/donnes membres sont accessibles uniquement par les

    fonctions qui implmentent les services offerts par la classe, et pas de l'extrieur

  • 1997-2003 Fabio HERNANDEZ228POO en C++: Objets et Classes

    Contrle d'accs (suite)Contrle d'accs (suite)

    } Il est ncessaire de modifier l'interface de la classe Pointclass Point { // Not yet finished !!!public:

    float getX(); // returns the x coordinatefloat getY(); // returns the y coordinatefloat rho(); // returns the distance to the originfloat theta(); // returns the angle to the

    // horizontal axisvoid translate(float horizontal, float vertical);void rotate(float angle);

    private:float x_; // x coordinate float y_; // y coordinate

    };

  • 1997-2003 Fabio HERNANDEZ229POO en C++: Objets et Classes

    Contrle d'accs (suite)Contrle d'accs (suite)

    } Il est maintenant impossible d'accder de l'extrieur aux attributs de la classe Point directement

    // Instantiate a Point objectPoint p;

    // Let's try to access the x_ attributecout

  • 1997-2003 Fabio HERNANDEZ230POO en C++: Objets et Classes

    Contrle d'accs (suite)Contrle d'accs (suite)

    } Notez qu'il n'est pas ncessaire de modifier l'implmentation des fonctions membres de la classe (rotate, translate,theta, rho, getX et getY)

    } Toute fonction membre d'une classe peut accder tous les attributs et toute autre fonction membre, y compris ceux privs, de la mme classe

    } C'est un mcanisme trs puissant de la technologie objet. Il permet de sparer compltement interface et implmentation cacher les dtails (secrets) de l'implmentation aux clients

    (encapsulation)} Rsultat: les modifications faites l'implmentation de la

    classe n'ont aucun impact chez les clients

  • 1997-2003 Fabio HERNANDEZ231POO en C++: Objets et Classes

    Contrle d'accs (suite)Contrle d'accs (suite)

    translaterotate

    getX

    getY theta

    rho

    x_ y_

    Encapsulation : pour accder aux donnes membres de la classe, ilfaut utiliser les servicesfournis par la classe

    Encapsulation : pour accder aux donnes membres de la classe, ilfaut utiliser les servicesfournis par la classe

    Classe Point

  • 1997-2003 Fabio HERNANDEZ232POO en C++: Objets et Classes

    } On peut diffrencier les fonctions membres d'une classe par rapport leur mission gestion (comparaison, cration/initialisation, destruction, copie, ...) modification de l'tat consultation de l'tat (attributs) de l'objet fonctions d'aide itration, pour les classes d'objets qui sont des conteneurs d'autres

    objets} Dans notre implmentation de la classe Point

    getX(), getY(), rho() et theta() servent consulter l'tat de l'objet

    translate() et rotate() modifient l'tat de l'objet il n'y a pas (encore) des fonctions membres de gestion ni d'aide

    Fonctions MembresFonctions Membres

  • 1997-2003 Fabio HERNANDEZ233POO en C++: Objets et Classes

    Fonctions Membres (suite)Fonctions Membres (suite)

    } Si le contraire n'est pas explicitement spcifi, en C++ les fonctions membres sont des modificateurs potentiels de l'tat de l'objet

    } En consquence, il est impossible de demander un service un objet dfini constant, si la fonction membre qui implmente le service ne l'est pas

    // Define a constant pointconst Point origin;

    // Retrieve the theta anglefloat angle = origin.theta(); // Compilation ERROR:

    // 'origin' is constant// and Point::theta() // is not

  • 1997-2003 Fabio HERNANDEZ234POO en C++: Objets et Classes

    Fonctions Membres (suite)Fonctions Membres (suite)

    d'aprs l'interface de la classe, la fonction membre theta() est un modificateur potentiel de l'tat de l'objet origin

    ceci est incompatible avec le fait que origin est constant} Il faut modifier lgrement l'interface de la classe Point

    pour informer le compilateur que Point::theta() ne modifie pas l'tat des objets de sa classe

    } Il suffit d'ajouter le mot cl const la dclaration de la fonction membre

  • 1997-2003 Fabio HERNANDEZ235POO en C++: Objets et Classes

    Fonctions Membres (suite)Fonctions Membres (suite)

    } Modification de l'interface de la classe Point (fichierPoint.h)

    class Point { // Not yet finished !!!public:

    // Modifiersvoid translate(float horizontal, float vertical);void rotate(float angle);

    // Selectorsfloat getX() const; // x coordinatefloat getY() const; // y coordinate

  • 1997-2003 Fabio HERNANDEZ236POO en C++: Objets et Classes

    float rho() const; // distance to the originfloat theta() const; // angle to the

    // horizontal axis

    private:

    // Data membersfloat x_; // Cartesian coordinates float y_;

    };

    Fonctions Membres (suite)Fonctions Membres (suite)

  • 1997-2003 Fabio HERNANDEZ237POO en C++: Objets et Classes

    Fonctions Membres (suite)Fonctions Membres (suite)

    } Modification de l'implmentation de la classe Point (fichierPoint.cpp), pour reflter les changements dans l'interface

    ///////////////////////////////////////////////////////// File: Point.cpp// Description: implementation of the Point class///////////////////////////////////////////////////////

    #include "Point.h"#include // we need sin(), cos(), sqrt()

  • 1997-2003 Fabio HERNANDEZ238POO en C++: Objets et Classes

    Fonctions Membres (suite)Fonctions Membres (suite)

    ///////////////////////////////////////////////////////// Modifiers

    void Point::translate(float horizontal, float vertical){

    x_ += horizontal;y_ += vertical;

    }

    void Point::rotate(float angle){

    float currentRho = rho();float newTheta = theta() + angle;

    x_ = currentRho * cos(newTheta);y_ = currentRho * sin(newTheta);

    }

  • 1997-2003 Fabio HERNANDEZ239POO en C++: Objets et Classes

    ///////////////////////////////////////////////////////// Selectors

    float Point::getX() const{

    return x_;}

    float Point::getY() const{

    return y_;}

    Fonctions Membres (suite)Fonctions Membres (suite)

  • 1997-2003 Fabio HERNANDEZ240POO en C++: Objets et Classes

    float Point::rho() const{

    return sqrt(x_*x_ + y_*y_);}

    float Point::theta() const{

    return atan2(y_, x_);}

    Fonctions Membres (suite)Fonctions Membres (suite)

  • 1997-2003 Fabio HERNANDEZ241POO en C++: Objets et Classes

    Fonctions Membres d'InitialisationFonctions Membres d'Initialisation

    } Comme pour les types primitifs, lors de la dfinition d'un objetle compilateur doit rserver une quantit de mmoire suffisante pour stocker l'objet donner une valeur initiale l'objet

    } Initialiser un objet compos de plusieurs donnes membres (comme un objet de la classe Point) se traduit par donner une valeur initiale chacune d'elles

    } Le compilateur fournit une fonction d'initialisation par dfaut pour chaque classe

    } Appele implicitement lors de la dfinition d'un objet

    Point p;

  • 1997-2003 Fabio HERNANDEZ242POO en C++: Objets et Classes

    Fonctions Membres d'Initialisation (suite)Fonctions Membres d'Initialisation (suite)

    de l'allocation d'un objet via l'oprateur newPoint* pointPointer = new Point;

    } Dans notre exemple de classe Point, cette fonction donne une valeur initiale aux atributs x_ et y_ (probablement zro)

    } C++ offre au programmeur la possibilit de dfinir sa propre mthode d'initialisation

    } Cette mthode d'initialisation est appele le constructeur} Un constructeur est une fonction membre comme les autres,

    avec deux caractristiques particulires il porte le mme nom que la classe il n'a pas un type de valeur de retour, mme pas void

    } Ajoutons le constructeur la classe Point

  • 1997-2003 Fabio HERNANDEZ243POO en C++: Objets et Classes

    Fonctions Membres d'Initialisation (suite)Fonctions Membres d'Initialisation (suite)

    class Point {public:

    // ConstructorPoint();

    // Modifiers...

    // Selectors...

    private:// Data members...

    };

  • 1997-2003 Fabio HERNANDEZ244POO en C++: Objets et Classes

    Fonctions Membres d'Initialisation (suite)Fonctions Membres d'Initialisation (suite)

    } Le fichier Point.cpp doit tre modifi pour ajouter l'implmentation du constructeur

    ///////////////////////////////////////////////////////// Constructor

    Point::Point(){

    x_ = 0.0;y_ = 0.0;

    }

  • 1997-2003 Fabio HERNANDEZ245POO en C++: Objets et Classes

    Fonctions Membres d'Initialisation (suite)Fonctions Membres d'Initialisation (suite)

    } C++ permet de dfinir plusieurs constructeurs diffrents pour la mme classe

    } Leur signatures doivent tre diffrentes} Nous pourrions ajouter notre classe Point un constructeur

    afin de pouvoir crer un objet et spcifier les valeurs initiales des coordones l'implmentation de la classe Point ne nous permet pas de faire cela

    directement, mais en deux tapes// Create the point objectPoint p; // p is (0.0, 0.0)

    // Translate itp.translate(45.0, 80.0);

  • 1997-2003 Fabio HERNANDEZ246POO en C++: Objets et Classes

    Fonctions Membres d'Initialisation (suite)Fonctions Membres d'Initialisation (suite)

    class Point {public:

    // ConstructorsPoint();Point(float initialX, float initialY);

    // Modifiers...

    // Selectors...

    private:// Data members...

    };

  • 1997-2003 Fabio HERNANDEZ247POO en C++: Objets et Classes

    Fonctions Membres d'Initialisation (suite)Fonctions Membres d'Initialisation (suite)

    } La classe Point offre maintenant deux possibilits de cration d'objets

    // Create a point at (45.0, 80.0)Point p(45.0, 80.0); // calls Point::Point(float,float)

    // Create a point at (0.0, 0.0)Point origin; // calls Point::Point()

    // Create a point at (5.0, 10.0) in the heapPoint* pointPointer = new Point(5.0, 10.0);

  • 1997-2003 Fabio HERNANDEZ248POO en C++: Objets et Classes

    Fonctions Membres d'Initialisation (suite)Fonctions Membres d'Initialisation (suite)

    } Le fichier Point.cpp contiendra l'implmentation du nouveau constructeur

    ///////////////////////////////////////////////////////// Constructors

    Point::Point() // Default constructor{

    x_ = 0.0;y_ = 0.0;

    }

    Point::Point(float initialX, float initialY) {

    x_ = initialX;y_ = initialY;

    }

  • 1997-2003 Fabio HERNANDEZ249POO en C++: Objets et Classes

    Fonction Membre de DestructionFonction Membre de Destruction

    } La fonction membre de destruction est appele quand un objet cr dans la pile d'excution sort du contexte (fin de bloc ou

    fin de fonction par exemple) un objet cr dans le tas est explicitement dtruit avec l'oprateurdelete

    } Comme pour les constructeurs, le compilateur fournit un destructeur par dfaut

    } Le destructeur est utile pour librer les ressources acquis lorsde la cration/modification de l'objet libration de mmoire fermeture des fichiers libration de verrous ...

  • 1997-2003 Fabio HERNANDEZ250POO en C++: Objets et Classes

    Fonction Membre de Destruction (suite)Fonction Membre de Destruction (suite)

    } Une classe ne peut avoir qu'un seul destructeur} Le destructeur porte le nom de la classe prcd du caractre

    ~ (tilda)} Comme pour les constructeurs, le destructeur n'a pas de type

    de valeur retour} A la diffrence des constructeurs, le destructeur n'accepte

    pas de paramtres

  • 1997-2003 Fabio HERNANDEZ251POO en C++: Objets et Classes

    Fonction Membre de Destruction (suite)Fonction Membre de Destruction (suite)

    class Point {public:

    // Constructors/DestructorPoint();Point(float initialX, float initialY);~Point();

    // Modifiers...

    // Selectors...

    private:// Data members...

    };

  • 1997-2003 Fabio HERNANDEZ252POO en C++: Objets et Classes

    Fonction Membre de Destruction (suite)Fonction Membre de Destruction (suite)

    } Le fichier Point.cpp contiendra l'implmentation du destructeur

    ///////////////////////////////////////////////////////// Destructor

    Point::~Point(){

    // Nothing to be done}

  • 1997-2003 Fabio HERNANDEZ253POO en C++: Objets et Classes

    Organisation des Fichiers SourceOrganisation des Fichiers Source

    #if !defined(POINT_H)#define POINT_H

    class Point {public:

    Point();~Point();

    private:float x_;float y_;

    };

    #endif // POINT_H

    #if !defined(POINT_H)#define POINT_H

    class Point {public:

    Point();~Point();

    private:float x_;float y_;

    };

    #endif // POINT_H

    Point.h Point.cpp

    #include #include "Point.h"

    Point::Point(){

    x_ = 0.0;y_ = 0.0;

    }

    Point::~Point(){}

    Point::getX(){

    return x_;}

    #include #include "Point.h"

    Point::Point(){

    x_ = 0.0;y_ = 0.0;

    }

    Point::~Point(){}

    Point::getX(){

    return x_;}

  • 1997-2003 Fabio HERNANDEZ254POO en C++: Objets et Classes

    ExercicesExercices

    } Ajouter une fonction membre pour comparer deux objets de la classe Point et dterminer s'ils sont identiques

    } Ajouter une fonction membre pour copier un objet de la classe Point dans un autre

    } Ajouter un troisime constructeur (appel constructeur de copie) pour construire un objet de la classe Point partir d'un objet de la classe Point pass comme argument

    } Ajouter une fonction membre pour modifier les valeurs des coordonnes (x et/ou y) d'un objet de la classe Point

    } Quelles modifications faut-il faire si l'on veut reprsenter un Point en coordonnes polaires et non pas cartsiennes et ce sans impacter les clients de la classe?

  • 1997-2003 Fabio HERNANDEZ255POO en C++: Objets et Classes

    RsumRsum

    } La classe est un moule pour construire des entits qui partagentstructure et comportement

    } L'interface et l'implmentation d'une classe sont clairement identifies

    } L'interface d'une classe est un contrat vis--vis des clients} L'objet est la structure dynamique d'un programme} Les objets collaborent (changent des messages) pour rsoudre

    le problme en question} Un objet est constitu d'attributs (structure) et de fonctions

    membres (comportement)} L'accs aux donnes et aux fonctions membres peut tre

    contrl et vrifi en temps de compilation