SlideShare une entreprise Scribd logo

Cours c++

cours c++

1  sur  12
Télécharger pour lire hors ligne
DEA
« Astrophysique et instrumentations associées »



                   C++
      Programmation orientée objet


                     2004
                Benoît Semelin
Références

Il existe de très nombreux tutoriels C++ téléchargeable gratuitement:


     - Pour une liste de tutoriels avec appréciation:
                               http://c.developpez.com/cours/

     - La page personnelle du créateur (en anglais)

                             http://www.research.att.com/~bs/3rd.html

         On y trouve un manuel d'apprentissage téléchageable.
La POO
                  (Programmation orientée objet)

C++, java sont des langages orientés objet.
Qu'est-ce que ça veut dire?
  Les objets sont de nouvelles sortes de variables
  encore plus générales que les types dérivés (ou           Assembleur




                                                                         Abstraction croissante
  structures).
  Leur caractéristique principale: ils acceptent des
  procédures     (fonctions,   subroutines)   comme         C, Fortran
  composantes.
A quoi ça sert?
  Améliorer la lisibilité d'un code en utilisant des
  schémas plus proche du raisonnement humain grâce           C++, java
  aux objets.
  Développer un code au sein d'un grand projet (plusieurs
  développeurs):      assurer     la      robustesse   et
  l'interopérabilité des différentes parties.
Un exemple d'objet
On veut simuler un système physique (p.e. un disque proto-planétaire) par un
ensemble de particules. L'objet de base du programme va être la particule.

Rappel: type dérivé (structure)
            Définition                             Utilisation

        typedef struct {                     vecteur3D pos[100],vel[100];
           double x;                         double   dt;
           double y;
           double z; }                       dt=0.01;
        vecteur3D;                           pos[50].x += vel[50].x*dt;
Déclaration de la classe « particule »:

       Déclaration (prototype)        Description des « méthodes »                  utilisation
   class particule {                   void particule::adv_pos (double dt) {   int main()
          private:                           pos.x += vel.x*dt;                {
            vecteur3D pos,vel;               pos.y += vel.y*dt;                   particule part[100];
            double    mass;                  pos.z += vel.z*dt;                   double dtime;
          public:                      }                                          .......
            void adv_pos (double);                                                for (i=0;i<100;i++)
   };                                                                             {
                                                                                         part[i].adv_pos(dt);
    La classe particule possède 4 membres: 3 variables (pos, vel et mass)         }
    et une méthode, ou ''fonction '' (adv_pos).                                }
Encapsulation de l'objet
class particule {
       private:
         vecteur3D pos,vel;
         double    mass;
       public:
         void adv_pos (double);
};

Les membres d'une classe peuvent avoir plusieurs statuts:
         - private: ils ne sont accessibles qu'aux autres membres de la classe. C'est le statut par défaut
         - public: ils sont accessibles partout où l'objet est déclaré.
         - protected: ils ne sont accessibles aux membres de la classe et des classes descendantes.

Dans notre exemple, la valeur de mass est privée, elle n'est pas accessible
depuis l'extérieur de la classe:
int main()
{
   particule part[100];
   double dtime;

    part[50].mass += 0.01;        <== n'a pas de sens!
}
Pourquoi mettre un membre
         de classe en « private » ?
Précisons tout d'abord que « private » est le statut par défaut d'un membre.

    Un membre « private » est protégé contre une modification incontrôlée de sa valeur
    On peut quand même y accéder en définissant des méthodes spéciales:
       class particule {                      Quel intérêt ?? Juste éviter les modifs incontrôlées ??
              private:
                double     mass;
                                              Non!
              public:
                void set_mass (double);
                double get_mass (void);       On pourrait, dans set_mass, vérifier que la mass est
       };                                     bien positive! Si un autre programmateur utilise
                                              set_mass, il n'aura pas besoin de faire le contrôle lui-
       void particule::set_mass(double x) {   même!
       mass=x;
       }                                      On obtient un code plus robuste pour le développement
                                              à plusieurs.
       double particule::get_mass(void){
       return mass;
       }

Recommandé

Chapitre4: Pointeurs et références
Chapitre4: Pointeurs et références Chapitre4: Pointeurs et références
Chapitre4: Pointeurs et références Aziz Darouichi
 
programmation orienté objet c++
programmation orienté objet c++programmation orienté objet c++
programmation orienté objet c++coursuniv
 
Cours Programmation Orientée Objet en C++
Cours Programmation Orientée Objet en C++Cours Programmation Orientée Objet en C++
Cours Programmation Orientée Objet en C++Amina HAMEURLAINE
 
Chapitre5: Classes et objets
Chapitre5: Classes et objetsChapitre5: Classes et objets
Chapitre5: Classes et objetsAziz Darouichi
 
POO Java Chapitre 4 Heritage et Polymorphisme
POO Java Chapitre 4 Heritage et PolymorphismePOO Java Chapitre 4 Heritage et Polymorphisme
POO Java Chapitre 4 Heritage et PolymorphismeMouna Torjmen
 
Chapitre6: Surcharge des opérateurs
Chapitre6:  Surcharge des opérateursChapitre6:  Surcharge des opérateurs
Chapitre6: Surcharge des opérateursAziz Darouichi
 
Chapitre2fonctionscppv2019
Chapitre2fonctionscppv2019Chapitre2fonctionscppv2019
Chapitre2fonctionscppv2019Aziz Darouichi
 

Contenu connexe

Tendances

POO Java Introduction
POO Java IntroductionPOO Java Introduction
POO Java IntroductionMouna Torjmen
 
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfslimyaich3
 
Chap1V2019: Cours en C++
Chap1V2019: Cours en C++Chap1V2019: Cours en C++
Chap1V2019: Cours en C++Aziz Darouichi
 
Chapitre 4 heritage et polymorphisme
Chapitre 4 heritage et polymorphismeChapitre 4 heritage et polymorphisme
Chapitre 4 heritage et polymorphismeAmir Souissi
 
POO Java Chapitre 1 Classe & Objet
POO Java Chapitre 1 Classe & ObjetPOO Java Chapitre 1 Classe & Objet
POO Java Chapitre 1 Classe & ObjetMouna Torjmen
 
Partie 9: Fonctions Membres — Programmation orientée objet en C++
Partie 9: Fonctions Membres — Programmation orientée objet en C++Partie 9: Fonctions Membres — Programmation orientée objet en C++
Partie 9: Fonctions Membres — Programmation orientée objet en C++Fabio Hernandez
 
POO Java Chapitre 6 Exceptions
POO Java  Chapitre 6 ExceptionsPOO Java  Chapitre 6 Exceptions
POO Java Chapitre 6 ExceptionsMouna Torjmen
 
Les Streams de Java 8
Les Streams de Java 8Les Streams de Java 8
Les Streams de Java 8Antoine Rey
 
POO Java Chapitre 2 Encapsulation
POO Java Chapitre 2 EncapsulationPOO Java Chapitre 2 Encapsulation
POO Java Chapitre 2 EncapsulationMouna Torjmen
 
Introduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El HassaniIntroduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El HassaniShellmates
 
Partie 11: Héritage — Programmation orientée objet en C++
Partie 11: Héritage — Programmation orientée objet en C++Partie 11: Héritage — Programmation orientée objet en C++
Partie 11: Héritage — Programmation orientée objet en C++Fabio Hernandez
 
Exercice 1 java Héritage
Exercice 1 java HéritageExercice 1 java Héritage
Exercice 1 java HéritageNadaBenLatifa
 
Chap 6 : classes et interfaces
Chap 6 : classes et interfacesChap 6 : classes et interfaces
Chap 6 : classes et interfacesAziz Darouichi
 
Chapitre 2: String en Java
Chapitre 2:  String en JavaChapitre 2:  String en Java
Chapitre 2: String en JavaAziz Darouichi
 

Tendances (20)

POO Java Introduction
POO Java IntroductionPOO Java Introduction
POO Java Introduction
 
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdf
 
Chap1V2019: Cours en C++
Chap1V2019: Cours en C++Chap1V2019: Cours en C++
Chap1V2019: Cours en C++
 
Python avancé : Tuple et objet
Python avancé : Tuple et objetPython avancé : Tuple et objet
Python avancé : Tuple et objet
 
Chapitre 4 heritage et polymorphisme
Chapitre 4 heritage et polymorphismeChapitre 4 heritage et polymorphisme
Chapitre 4 heritage et polymorphisme
 
POO Java Chapitre 1 Classe & Objet
POO Java Chapitre 1 Classe & ObjetPOO Java Chapitre 1 Classe & Objet
POO Java Chapitre 1 Classe & Objet
 
Corrige tp java
Corrige tp javaCorrige tp java
Corrige tp java
 
Partie 9: Fonctions Membres — Programmation orientée objet en C++
Partie 9: Fonctions Membres — Programmation orientée objet en C++Partie 9: Fonctions Membres — Programmation orientée objet en C++
Partie 9: Fonctions Membres — Programmation orientée objet en C++
 
Cours JavaScript
Cours JavaScriptCours JavaScript
Cours JavaScript
 
POO Java Chapitre 6 Exceptions
POO Java  Chapitre 6 ExceptionsPOO Java  Chapitre 6 Exceptions
POO Java Chapitre 6 Exceptions
 
Les Streams de Java 8
Les Streams de Java 8Les Streams de Java 8
Les Streams de Java 8
 
POO Java Chapitre 2 Encapsulation
POO Java Chapitre 2 EncapsulationPOO Java Chapitre 2 Encapsulation
POO Java Chapitre 2 Encapsulation
 
Introduction à Python
Introduction à PythonIntroduction à Python
Introduction à Python
 
Langage C#
Langage C#Langage C#
Langage C#
 
Introduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El HassaniIntroduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El Hassani
 
TP C++ : Correction
TP C++ : CorrectionTP C++ : Correction
TP C++ : Correction
 
Partie 11: Héritage — Programmation orientée objet en C++
Partie 11: Héritage — Programmation orientée objet en C++Partie 11: Héritage — Programmation orientée objet en C++
Partie 11: Héritage — Programmation orientée objet en C++
 
Exercice 1 java Héritage
Exercice 1 java HéritageExercice 1 java Héritage
Exercice 1 java Héritage
 
Chap 6 : classes et interfaces
Chap 6 : classes et interfacesChap 6 : classes et interfaces
Chap 6 : classes et interfaces
 
Chapitre 2: String en Java
Chapitre 2:  String en JavaChapitre 2:  String en Java
Chapitre 2: String en Java
 

En vedette

STM32F4+Android Application
STM32F4+Android ApplicationSTM32F4+Android Application
STM32F4+Android ApplicationHajer Dahech
 
Cours de programmation en c
Cours de programmation en cCours de programmation en c
Cours de programmation en cbenouini rachid
 
C Plus Plus demo
C Plus Plus demoC Plus Plus demo
C Plus Plus demopadnot
 
Web-In 2010: Programmation Native iOS (French)
Web-In 2010: Programmation Native iOS (French)Web-In 2010: Programmation Native iOS (French)
Web-In 2010: Programmation Native iOS (French)Fred Brunel
 
Programmation des pic_en_c_part2
Programmation des pic_en_c_part2Programmation des pic_en_c_part2
Programmation des pic_en_c_part2oussamada
 
Micocontroleur16 fxxx (1)
Micocontroleur16 fxxx (1)Micocontroleur16 fxxx (1)
Micocontroleur16 fxxx (1)Karim Touati
 
Généralités sur les périphériques du STM32
Généralités sur les périphériques du STM32Généralités sur les périphériques du STM32
Généralités sur les périphériques du STM32Hajer Dahech
 
Programmation des pic_en_c_part1
Programmation des pic_en_c_part1Programmation des pic_en_c_part1
Programmation des pic_en_c_part1oussamada
 
Microcontroleur Pic16 F84
Microcontroleur Pic16 F84Microcontroleur Pic16 F84
Microcontroleur Pic16 F84guest1e7b02
 
chap1 generalites_signaux-systemes
chap1 generalites_signaux-systemeschap1 generalites_signaux-systemes
chap1 generalites_signaux-systemesBAKKOURY Jamila
 
ARDUINO + LABVIEW : CONTRÔLE DE LA TEMPÉRATURE
ARDUINO + LABVIEW : CONTRÔLE DE LA TEMPÉRATUREARDUINO + LABVIEW : CONTRÔLE DE LA TEMPÉRATURE
ARDUINO + LABVIEW : CONTRÔLE DE LA TEMPÉRATUREHajer Dahech
 

En vedette (20)

STM32F4+Android Application
STM32F4+Android ApplicationSTM32F4+Android Application
STM32F4+Android Application
 
Cours de c
Cours de cCours de c
Cours de c
 
Cours de programmation en c
Cours de programmation en cCours de programmation en c
Cours de programmation en c
 
Séries de Fourier
Séries de FourierSéries de Fourier
Séries de Fourier
 
C Plus Plus demo
C Plus Plus demoC Plus Plus demo
C Plus Plus demo
 
Web-In 2010: Programmation Native iOS (French)
Web-In 2010: Programmation Native iOS (French)Web-In 2010: Programmation Native iOS (French)
Web-In 2010: Programmation Native iOS (French)
 
Compteur ARDUINO
Compteur ARDUINOCompteur ARDUINO
Compteur ARDUINO
 
Pic16f84
Pic16f84Pic16f84
Pic16f84
 
TP C++ : enoncé
TP C++ : enoncéTP C++ : enoncé
TP C++ : enoncé
 
Programmation des pic_en_c_part2
Programmation des pic_en_c_part2Programmation des pic_en_c_part2
Programmation des pic_en_c_part2
 
Micocontroleur16 fxxx (1)
Micocontroleur16 fxxx (1)Micocontroleur16 fxxx (1)
Micocontroleur16 fxxx (1)
 
Généralités sur les périphériques du STM32
Généralités sur les périphériques du STM32Généralités sur les périphériques du STM32
Généralités sur les périphériques du STM32
 
Programmation des pic_en_c_part1
Programmation des pic_en_c_part1Programmation des pic_en_c_part1
Programmation des pic_en_c_part1
 
Microcontroleur Pic16 F84
Microcontroleur Pic16 F84Microcontroleur Pic16 F84
Microcontroleur Pic16 F84
 
Cours pics16 f877
Cours pics16 f877Cours pics16 f877
Cours pics16 f877
 
chap1 generalites_signaux-systemes
chap1 generalites_signaux-systemeschap1 generalites_signaux-systemes
chap1 generalites_signaux-systemes
 
ARDUINO + LABVIEW : CONTRÔLE DE LA TEMPÉRATURE
ARDUINO + LABVIEW : CONTRÔLE DE LA TEMPÉRATUREARDUINO + LABVIEW : CONTRÔLE DE LA TEMPÉRATURE
ARDUINO + LABVIEW : CONTRÔLE DE LA TEMPÉRATURE
 
Microcontroleur
MicrocontroleurMicrocontroleur
Microcontroleur
 
CP 151013
CP 151013CP 151013
CP 151013
 
Bac 2012 SVT
Bac 2012 SVTBac 2012 SVT
Bac 2012 SVT
 

Similaire à Cours c++

Chapitre 2 classe et objet
Chapitre 2   classe et objetChapitre 2   classe et objet
Chapitre 2 classe et objetAmir Souissi
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008Khalil Lechheb
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008Khalil Lechheb
 
Chap 2--POO avec JAVA.pdf
Chap 2--POO avec JAVA.pdfChap 2--POO avec JAVA.pdf
Chap 2--POO avec JAVA.pdframadanmahdi
 
Correction TP4 Atelier C++ /GL2 INSAT / Tunisie
Correction TP4 Atelier C++ /GL2 INSAT / TunisieCorrection TP4 Atelier C++ /GL2 INSAT / Tunisie
Correction TP4 Atelier C++ /GL2 INSAT / TunisieMariem ZAOUALI
 
Diagramme de Classe
Diagramme de ClasseDiagramme de Classe
Diagramme de ClasseabdoMarocco
 
Cpp2 : classes et objets
Cpp2 : classes et objetsCpp2 : classes et objets
Cpp2 : classes et objetsAbdoulaye Dieng
 
Chap 03 poo en java partie2
Chap 03 poo en java partie2Chap 03 poo en java partie2
Chap 03 poo en java partie2Yassine Badri
 
Cours de C++, en français, 2002 - Cours 2.2
Cours de C++, en français, 2002 - Cours 2.2Cours de C++, en français, 2002 - Cours 2.2
Cours de C++, en français, 2002 - Cours 2.2Laurent BUNIET
 

Similaire à Cours c++ (20)

POO-chapitre3.pptx
POO-chapitre3.pptxPOO-chapitre3.pptx
POO-chapitre3.pptx
 
Chapitre3 2013 POO
Chapitre3 2013 POOChapitre3 2013 POO
Chapitre3 2013 POO
 
Chapitre 2 classe et objet
Chapitre 2   classe et objetChapitre 2   classe et objet
Chapitre 2 classe et objet
 
POO-JAVA-partie-1.pdf
POO-JAVA-partie-1.pdfPOO-JAVA-partie-1.pdf
POO-JAVA-partie-1.pdf
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008
 
Memo java
Memo javaMemo java
Memo java
 
Qc mcorrige
Qc mcorrigeQc mcorrige
Qc mcorrige
 
Chap 2--POO avec JAVA.pdf
Chap 2--POO avec JAVA.pdfChap 2--POO avec JAVA.pdf
Chap 2--POO avec JAVA.pdf
 
Cours de JAVA de base
Cours de JAVA  de baseCours de JAVA  de base
Cours de JAVA de base
 
Correction TP4 Atelier C++ /GL2 INSAT / Tunisie
Correction TP4 Atelier C++ /GL2 INSAT / TunisieCorrection TP4 Atelier C++ /GL2 INSAT / Tunisie
Correction TP4 Atelier C++ /GL2 INSAT / Tunisie
 
Pensez objets avec java
Pensez objets avec javaPensez objets avec java
Pensez objets avec java
 
2006 2007-heritage-en-c++
2006 2007-heritage-en-c++2006 2007-heritage-en-c++
2006 2007-heritage-en-c++
 
XB-Java.ppt
XB-Java.pptXB-Java.ppt
XB-Java.ppt
 
Diagramme de Classe
Diagramme de ClasseDiagramme de Classe
Diagramme de Classe
 
Ch03
Ch03Ch03
Ch03
 
Cpp2 : classes et objets
Cpp2 : classes et objetsCpp2 : classes et objets
Cpp2 : classes et objets
 
Part1
Part1Part1
Part1
 
Chap 03 poo en java partie2
Chap 03 poo en java partie2Chap 03 poo en java partie2
Chap 03 poo en java partie2
 
Cours de C++, en français, 2002 - Cours 2.2
Cours de C++, en français, 2002 - Cours 2.2Cours de C++, en français, 2002 - Cours 2.2
Cours de C++, en français, 2002 - Cours 2.2
 

Cours c++

  • 1. DEA « Astrophysique et instrumentations associées » C++ Programmation orientée objet 2004 Benoît Semelin
  • 2. Références Il existe de très nombreux tutoriels C++ téléchargeable gratuitement: - Pour une liste de tutoriels avec appréciation: http://c.developpez.com/cours/ - La page personnelle du créateur (en anglais) http://www.research.att.com/~bs/3rd.html On y trouve un manuel d'apprentissage téléchageable.
  • 3. La POO (Programmation orientée objet) C++, java sont des langages orientés objet. Qu'est-ce que ça veut dire? Les objets sont de nouvelles sortes de variables encore plus générales que les types dérivés (ou Assembleur Abstraction croissante structures). Leur caractéristique principale: ils acceptent des procédures (fonctions, subroutines) comme C, Fortran composantes. A quoi ça sert? Améliorer la lisibilité d'un code en utilisant des schémas plus proche du raisonnement humain grâce C++, java aux objets. Développer un code au sein d'un grand projet (plusieurs développeurs): assurer la robustesse et l'interopérabilité des différentes parties.
  • 4. Un exemple d'objet On veut simuler un système physique (p.e. un disque proto-planétaire) par un ensemble de particules. L'objet de base du programme va être la particule. Rappel: type dérivé (structure) Définition Utilisation typedef struct { vecteur3D pos[100],vel[100]; double x; double dt; double y; double z; } dt=0.01; vecteur3D; pos[50].x += vel[50].x*dt; Déclaration de la classe « particule »: Déclaration (prototype) Description des « méthodes » utilisation class particule { void particule::adv_pos (double dt) { int main() private: pos.x += vel.x*dt; { vecteur3D pos,vel; pos.y += vel.y*dt; particule part[100]; double mass; pos.z += vel.z*dt; double dtime; public: } ....... void adv_pos (double); for (i=0;i<100;i++) }; { part[i].adv_pos(dt); La classe particule possède 4 membres: 3 variables (pos, vel et mass) } et une méthode, ou ''fonction '' (adv_pos). }
  • 5. Encapsulation de l'objet class particule { private: vecteur3D pos,vel; double mass; public: void adv_pos (double); }; Les membres d'une classe peuvent avoir plusieurs statuts: - private: ils ne sont accessibles qu'aux autres membres de la classe. C'est le statut par défaut - public: ils sont accessibles partout où l'objet est déclaré. - protected: ils ne sont accessibles aux membres de la classe et des classes descendantes. Dans notre exemple, la valeur de mass est privée, elle n'est pas accessible depuis l'extérieur de la classe: int main() { particule part[100]; double dtime; part[50].mass += 0.01; <== n'a pas de sens! }
  • 6. Pourquoi mettre un membre de classe en « private » ? Précisons tout d'abord que « private » est le statut par défaut d'un membre. Un membre « private » est protégé contre une modification incontrôlée de sa valeur On peut quand même y accéder en définissant des méthodes spéciales: class particule { Quel intérêt ?? Juste éviter les modifs incontrôlées ?? private: double mass; Non! public: void set_mass (double); double get_mass (void); On pourrait, dans set_mass, vérifier que la mass est }; bien positive! Si un autre programmateur utilise set_mass, il n'aura pas besoin de faire le contrôle lui- void particule::set_mass(double x) { même! mass=x; } On obtient un code plus robuste pour le développement à plusieurs. double particule::get_mass(void){ return mass; }
  • 7. Les fonctions amies d'une classe Il s'agit d'une autre manière d'agir sur les membres « private » d'une classe. On déclare dans la classe, la liste des fonctions « amies », celles-ci auront un accès illimité aux membres de la classe. Exemple: class particule { friend double Ec(int); Il ne faut pas abuser des fonctions amies: cela va à l'encontre de l'esprit vecteur3D pos,vel; double mass; de la programmation objet. }; On peut définir la classe B comme double Ec(int i) { Ec=0.5*part[i].mass*(pow(part[i].vel.x,2) amie dans la classe A: toutes les +pow(part[i].vel.y,2)+pow(part[i].vel.z,2)); méthodes de B sont alors amies de A: return; } class particule { friend class diagnostic; int main() { vecteur3D pos,vel; double mass; particule part[100]; }; class diagnostic { ..... public: for(i=0;i<100;i++) { cout << Ec(i) << endl;} double Ec(int); double Ep(int); ..... }; }
  • 8. Constructeur et destructeur d'objet Il existe 2 méthodes spéciales pour chaque classe, le constructeur et le destructeur. Le mon des fonctions correspondantes n'est pas libre. Le constructeur: Le destructeur: Il est appelé automatiquement à chaque fois Il est appelé automatiquement quand la qu'on déclare un objet (instanciation) de la portée l'objet s'achève, ou, pour allocation classe. dynamique, au moment de l'appel de delete. class particule { class particule { private: private: vecteur3D pos,vel; vecteur3D pos,vel; double mass; double mass; public: public: particule (double); // Constructeur ~particule (void); // Destructeur // pas de type !! // pas de type !! }; // pas d'argument !! }; particule::particule(double m) { particule::~particule(double m) mass = m; { } // pas de ; !! cout << ''Une particule détruite! '' << endl ; } // pas de ; !! particule part(1.); // Déclaration et appel // du constructeur
  • 9. Surcharge de fonction. Il est possible de donner plusieurs définitions d'une même fonction qui diffèrent par le type et le nombre d'arguments. Cela s'appelle la surcharge de fonction. Exemple: #include <string> void alarme() { cout << ''Alarme! '' << endl; } void alarme(string message} { cout<<''Alarme : '' << message << endl; } Suivant le contexte (type et nombre d'arguments passés à la fonction) le compilateur détermine quelle version appeler. La surcharge de fonction peut s'appliquer aux fonctions membres de classes.
  • 10. Surcharge d'opérateur. typedef struct { double x; Il est possible d'ajouter une définition double y; (surcharger) aux opérateur classiques (=, double z; } vecteur3D; +, -, *, /, %, &&, ||, ==, <, ...) pour qu'ils soient capables d'agir sur les objets d'une class particule { private: classe. vecteur3D pos,vel; double mass; public: A gauche, exemple de surcharge de +, à particule operator+ (particule); l'aide d'une méthode de la classe. Il est }; aussi possible d'utiliser une fonction particule particule::operator+(particule r) { externe. particule resultat; resultat.pos.x=(pos.x*mass+r.pos.x*r.mass)/(mass+r.mass); resultat.pos.y=(pos.y*mass+r.pos.y*r.mass)/(mass+r.mass); L'opérateur = possède une définition par resultat.pos.z=(pos.z*mass+r.pos.z*r.mass)/(mass+r.mass); resultat.vel.x=(vel.x*mass+r.vel.x*r.mass)/(mass+r.mass); défaut !! Il copie les membres un à un resultat.vel.y=(vel.y*mass+r.vel.y*r.mass)/(mass+r.mass); dans les membres correspondants. resultat.vel.z=(vel.z*mass+r.vel.z*r.mass)/(mass+r.mass); resultat.mass=mass+r.mass; return(resultat); } int main() { particule a,b,c; ... a=b+c; /* valide */ a=b.operator+(c); /* également valide */ .... }
  • 11. Héritage de classe Il s'agit d'un aspect essentiel de C++. A partir d'une classe de base (ou classe mère) on peut définir des classes dérivées (ou classes filles): Les classes dérivées possèdent automatiquement les membres de la classe mère. Les classes dérivées peuvent définir les propres membres, mais aussi redéfinir les méthodes de la classe mère. class particule { } plublic: vecteur3D pos,vel; protected: Classe mère double mass; public: void adv_pos (double); }; } class particule_gaz : public particule { protected: double temperature; double densite; Classe fille: public: NB: le membre mass de particule_gaz est double pression(); accessible par les méthodes de particule et }; particule_gaz, c'est tout!
  • 12. Fin