la programmation par objets
DESCRIPTION
La programmation par Objets. Tour d’horizon avec C++. Entrée / Sortie Lecture / Ecriture Cin / Cout. Entrée / Sorties. E/S par l'intermédiaires de flots (ou flux) Flot d’entrée : fournit de l’information ( envoie des valeurs) opérateur : >> (lecture sur un flot d’entrée) - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/1.jpg)
Tour d’horizon avec C++
![Page 2: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/2.jpg)
BTS IRIS 1ère année POO 2
Entrée / SortieEntrée / SortieLecture / EcritureLecture / Ecriture
Cin / CoutCin / Cout
![Page 3: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/3.jpg)
Entrée / SortiesE/S par l'intermédiaires de flots (ou flux)
Flot d’entrée : fournit de l’information (envoieenvoie des valeurs)opérateur : >> (lecture sur un flot d’entrée)standard : cin (connecté par défaut au clavier)
Flot de sortie :reçoit de l'information (récupèrerécupère des valeurs)opérateur : << (écriture sur un flot de sortie) standard : cout (connecté par défaut à l'écran)
BTS IRIS 1ère année POO 3
![Page 4: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/4.jpg)
Flux
BTS IRIS 1ère année POO 4
cout
cin
Flux sortie
>>
<<
>>Flux entrée
<<
Lecture
Ecriture
![Page 5: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/5.jpg)
Création de fluxInclure les fichiers d'en-tête :
<fstream.h><iostream.h>
Créer un flux d’entrée (ouvrir un fichier en lecture) : ifstream nomFlux ("nomFichier");ifstream fluxE("C:\MesDocs\Cpp\test.txt");
Créer un flux de sortie (ouvrir un fichier en écriture) :ofstream nomFlux ("nomFichier");ofstream fluxS("test2.txt");//meme repertoire
BTS IRIS 1ère année POO 5
![Page 6: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/6.jpg)
Ouverture / FermeturePar défaut, un flux de sortie remplaceremplace
(supprime) les données existantes du fichierIl faut préciser s’il s’agit d’un ajoutajout
(ouvrir le fichier en mode ajout):fstream nomFlux ("nomFichier ", ios_base::app);fstream fluxSA("test3.txt", ios_base::app);
Fermeture d'un flux (fermeture du fichier)nomFlux.close();fluxSA.close();
BTS IRIS 1ère année POO 6
![Page 7: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/7.jpg)
Lecture/Écriture dans fichiersÉcriture sur un flux (dans un fichier)
nomFlux << expression1 [<<expression2<< …];fluxS << nom << " " << age << endl; (nom: string, age : int)
Lecture sur un flux (dans un fichier)nomFlux >> variable1 [>> variable2>> …];fluxE >> nom >> age; (espaces et le sauts de ligne sont des séparateurs de
lecture)
BTS IRIS 1ère année POO 7
![Page 8: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/8.jpg)
Lecture/Écriture dans fichiersTest de fin de fichierTest de fin de fichier
nomFluxnomFlux.eof( ).eof( )b = fluxE.eof(); //b : bool
Vrai si la lecture a Vrai si la lecture a déjàdéjà déclenché une erreur déclenché une erreur Attention :Attention :
Fait une boucle de trop !Fait une boucle de trop !Il faut donc que la dernière chose de la boucle soit une Il faut donc que la dernière chose de la boucle soit une
lecture !lecture !
BTS IRIS 1ère année POO 8
while ( !fluxE.eof() ){
fluxE >> nom >> tel ;cout << nom << "\t"<< tel << endl;
}
![Page 9: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/9.jpg)
Exemple écriture#include<fstream>#include<string>#include<iostream>using namespace std; main (){ string nomSaisi; int ageSaisi; cout << " quel est votre nom? "; cin >> nomSaisi; cout << " quel est votre age? "; cin >> ageSaisi; ofstream fluxS("personne1.txt", ios::in|ios::app); fluxS << nomSaisi << " a "<< ageSaisi << " ans " << "\n"; fluxS.close();}
BTS IRIS 1ère année POO 9
![Page 10: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/10.jpg)
Exemple Lecture#include<fstream>#include<string>#include<iostream>using namespace std; main ( ){string nom;int tel ;ifstream fluxE("repertoire.txt");fluxE >> nom >> tel;while ( !fluxE.eof() ){
cout << nom << "\t"<< tel << endl;fluxE >> nom >> tel ;
}fluxE.close( );
}
BTS IRIS 1ère année POO 10
Attention à l’ordre !
![Page 11: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/11.jpg)
BTS IRIS 1ère année POO 11
Les classesLes classes
![Page 12: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/12.jpg)
IntroductionQuelques définitionsProblème ? Algorithme Programme
Un algorithmealgorithme est une description non ambiguë d’un calcul ou de la résolution d’un problème en un nombre fini d’étapes.
Un programmeprogramme est l’implantation d’un algorithme dans un langage de programmation
Un langage de programmation langage de programmation n’est donc qu’un moyen d’expression des traitements que peut réaliser une machine pour résoudre le problème.
![Page 13: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/13.jpg)
IntroductionTraitement + Données = Programmes
Priorité aux données :SGBD + langages de requête
Priorité aux traitements :Algorithmes + langages de programmation
structurésApproche combinée :
Structures de données & fonctions Classes d’objets
![Page 14: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/14.jpg)
IntroductionAperçu des langages :
Il existe un grand nombre de langages de programmation (>2000 !)
Ces langages partagent beaucoup de concepts commun :- Nombre limité de structuresstructures lexicaleslexicales (vocabulaire)- Nombre limité de syntaxesyntaxe (grammaire)- Nombre limité de sémantiquessémantiques (interprétation)- Nombre limité de mécanismes de traductiontraduction et
d’exécutiond’exécution
![Page 15: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/15.jpg)
IntroductionAperçu des langages :Point commun ultime : équivalence des langages
avec celui de la machine de Turing universelle machine de Turing universelle (1936)
e1
0 1 1 0 1 0 Bande magnétique
Tête de lecture pouvant lire, écrire et se déplacer à droite et à gauche
![Page 16: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/16.jpg)
IntroductionLa genèse des langages
Origine (<1955) : le langage machine Seul langage compris par la machine (directement) L’UC reçoit puis exécute 1 à 1 les instructions
Inintelligible pour les humains : Une sommeBinaire hex
10001011 8B \01000101 45 | lire premier entier dans le registre AX00001010 0A /00000011 03 \01000101 45 | lire second entier et ajouter à AX00010100 14 /
![Page 17: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/17.jpg)
IntroductionLa genèse des langages
Le langage assembleur Un peu plus lisible Difficile car nécessite une très bonne connaissance de
l’architecture de la machine (registres du processeur…)
Langage Bas niveau
mov 10(%ebp), %ax ; lire premier entier dans le reg. AXAdd 20(%ebp), %ax ; lire second entier et ajouter à AX
![Page 18: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/18.jpg)
IntroductionLa genèse des langages
Le langage haut niveau Notation plus lisible et familières Portabilité (peut être exécuter sur différentes
machines sans trop de modifications) Détection plus simple d’erreurs
AX = X+Y;
![Page 19: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/19.jpg)
IntroductionLa genèse des langages :
Le langage à Objets On mélange les structures avec des fonctions Permet d’avoir des blocs autonomes (qui se chargent
de tout : s’initialiser, modifier les valeurs de la structure, s’afficher…)
![Page 20: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/20.jpg)
Les objetsLes objetsobjets sont les éléments logiciels fondamentaux
associés au paradigme de programmation par objets (sic!)
Définition : un objet représente une chose, une entité ou un concept et est caractérisé par un étatétat, un comportementcomportement et une identitéidentité.
L’état d’un objet est égal à la valeur des donnéesdonnées qui lui sont associées
Le comportement correspond à la responsabilitéresponsabilité de l’objet
L’identité précise l’existencel’existence de l’objet indépendamment de sa valeur et de la façon dont on le désigne
![Page 21: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/21.jpg)
Les objetsPour simplifier :Un objet, c’est
Une structureDes fonctions
Donc dans un objet, on aDes variables (comme dans une structure)Des fonctions
![Page 22: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/22.jpg)
Les objetsUn objet représente une chose, une entité ou un
concept et est caractérisé par un étatétat, un comportementcomportement et une identitéidentité.
Objet : association des donnéesdonnées (attributs) et fonctionsfonctions (méthodes) agissant sur ces donnéesObjet = Attributs + Méthodes
Autre vocabulaire :Attribut : donnée membreMéthode : fonction membre
![Page 23: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/23.jpg)
Les objetsExemple : Un jeu de Tetris-like représente chaque
pièce par un objetLes données associées à une pièce sont sa
dimension (nombre de blocs composants), sa forme (disposition relative des blocs), son orientation, sa position dans le tableau et sa couleur.
La responsabilité d’une pièce inclut la capacité de se déplacer verticalement d’une ou plusieurs cases, de pivoter à gauche et à droite
![Page 24: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/24.jpg)
La programmation par objetsL’approche par objets est basé sur une nouvelle
approcheMessage
Objets
![Page 25: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/25.jpg)
La programmation par objetsL’approche par objets est basé sur une nouvelle
approche
Résoudre un problème en adoptant une démarche par objets consiste donc à créer un certain créer un certain nombre d’objets nombre d’objets correspondant aux éléments du problème, et à faire communiquer ces objets communiquer ces objets entre eux.
![Page 26: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/26.jpg)
La programmation par objetsExemple (Tetris) : Un objet pièce reçoit un
message demandant un déplacement maximum vers le bas
1. L’objet envoie des messages à toutes les pièces déjà disposées dans le tableau, afin de leur demander d’évaluer leur position
2. L’objet calcule sa position finale en fonction des contraintes imposées par les autres pièces
3. L’objet réalise le déplacement en envoyant un message à chacun de ses blocs composants avec leurs nouvelles positions respectives
![Page 27: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/27.jpg)
Apports de la POOClasse : description d’un type d’objet
une variable de ce type est appelé instanceinstanceEncapsulation des données
Comme pour une structure, la variable contient plusieurs informations de plusieurs types différents
Héritage de classe Permet de donner des fonctions à ses enfants
(permet de ne pas avoir a tout réécrire)
BTS IRIS 1ère année POO 27
![Page 28: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/28.jpg)
EncapsulationIl n’est pas possible d’agir directementdirectement
sur les attributs d’un objetPar défaut, les attributs sont privés, c’est-à-
dire qu’ils ne sont pas accessibles à partir du main() !
Il faut passer par l’intermédiaire de méthodesméthodes dédiéesEn général précédé de set et get.
Un objet se caractérise alors uniquement par les spécificationsspécifications de ses méthodes
BTS IRIS 1ère année POO 28
![Page 29: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/29.jpg)
Avantages principauxFacilite la maintenancemaintenance : modification sans
incidenceFacilite la réutilisabilitéréutilisabilité : détails
d’implémentation sont cachés
L’encapsulation n’est pas obligatoire en C++ mais fortement conseilléec’est là-dessus que vous serez noté !c’est là-dessus que vous serez noté !
BTS IRIS 1ère année POO 29
![Page 30: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/30.jpg)
HéritagePermet de définir une nouvelle classe nouvelle classe à
partir d’une classe existanteLa nouvelle classe « hérite » des attributs et
méthodes de l’ancienneAjout de nouveaux attributs et méthodes Peut-être réitéré autant de fois que nécessaire
(C hérite de B qui hérite de A…)
Facilite grandement la réutilisationréutilisation et l’extensibilitél’extensibilité
BTS IRIS 1ère année POO 30
![Page 31: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/31.jpg)
Classes et ObjetsAttributs et MéthodesConstructeursInitialisationDestructionAttributs et méthodes de classeComposition de classe
BTS IRIS 1ère année POO 31
![Page 32: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/32.jpg)
DéfinitionsUne classe est la généralisationgénéralisation de la
notion de type défini par l’utilisateur
Classe : association à la fois les donnéesdonnées et et les fonctionsfonctions
Les objets sont des instancesinstances de classesIls possèdent les mêmes caractéristiques que
les variablesvariables ordinairesordinaires
BTS IRIS 1ère année POO 32
![Page 33: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/33.jpg)
La structure d’un objetL’état d’un objet est défini par le contenucontenu de ses
variablesLe comportement d’un objet est défini par un
ensemble d’opérationsd’opérations, chacune étant représentée par une méthodeméthode
Une demande d’effectuer une opération est transmise par un messagemessage, éventuellement accompagné de paramètresparamètresUn message se traduit par l’appel d’une méthode de
l’objet
![Page 34: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/34.jpg)
Objet Un objet se définit par :
Ses attributsattributs (variables) : caractérisent son état variant au cours de l’exécution du programme
Ses méthodesméthodes (fonctions) : déterminent son comportement
BTS IRIS 1ère année POO 34
Comptesolde : int numero : int proprietaire : stringcreation(int, string): void depot(int): void retrait(int): void
Nom de la classe
Attributs
Méthodes
![Page 35: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/35.jpg)
Classes et instances Il arrive bien souvent que plusieurs objets partagent les
mêmes caractéristiquesExemple : Bien que les pièces de Tetris ne sont pas strictement
identiques, leur mémoire possède la même structurepossède la même structure, i.e. une variable de dimension, de forme, d’orientation, …
De même, leur comportement est défini à partir des mêmes opérations telles que se déplacer d’une case, se déplacer de plusieurs cases, pivoter à gauche et pivoter à droite.
Définition : Une classeclasse est un ensemble d’objets possédant des variables et des méthodes identiques.
La méthode invoquée par un objet dès qu’il reçoit un message est déterminée sur la base de la classeclasse de cet objet.
Tout objet est une instance d’une classe
![Page 36: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/36.jpg)
Compte.h Compte.cpp
Définition en C++ class Compte{
int solde;int numero;string proprietaire;
public :void creation(int, string);void depot(int);void retrait(int);
};
void Compte::creation(int num, string prop)
{numero = num;proprietaire = prop;solde = 0;
}
void Compte::depot(int montant){
solde = solde + montant;}
void Compte::retrait(int montant){
solde = solde - montant;}
BTS IRIS 1ère année POO 36
C’est ici que l’on déclare toutes les
variables et toutes les fonctions que l’on
pourra utiliser avec l’objet
C’est ici que l’on écrit le code de toutes les
fonctions que l’on a déclaré dans le fichier .h
![Page 37: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/37.jpg)
Utilisationmain(void){Compte c1;c1.creation(101, "Lelore");c1.depot(1 000 000 000);c1.retrait(200);Compte c2;c2.creation(102, "Eleve");c2.depot(100);c2.retrait(1000);…
}
BTS IRIS 1ère année POO 37
On déclare une variable de type
Compte
On utilise une fonction de l’objet
On déclare une autre variable de
type Compte
On utilise une fonction de l’autre
objet
![Page 38: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/38.jpg)
Interaction Les objets interagissent entre eux par envoi de envoi de
messagesmessages : demande d’exécution d’une de ses méthodes et éventuellement retour d’un résultat
L’exécution d’un programme se traduit donc par une succession d’envois de messages
BTS IRIS 1ère année POO 38
![Page 39: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/39.jpg)
class Guichet{
int identifiant;public :
void depotAutomatique (Compte&, int);void retraitAutomatique (Compte&, int);
};void Guichet::depotAutomatique(Compte &c, int montant){
c.depot(montant);}void Guichet::retraitAutomatique(Compte &c, int montant){
c.retrait(montant);}main(void){
Compte CptDupond, CptDurand;Guichet CredL;CompteDupond.creation(123, "Dupond");CompteDurand.creation(333, "Durand");CredL.depotAutomatique(CptDupond, 200); CredL.retraitAutomatique(CptDurand, 400);
}
Exemple
BTS IRIS 1ère année POO 39
![Page 40: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/40.jpg)
Appel entre méthodesD’un autre objet (instance) : préfixé de
l’identifiantSa propre méthode : mot clé « this »
Exemple :
void Compte::virement(Compte &c, int montant){c.depot(montant);this->retrait(montant);
}
BTS IRIS 1ère année POO 40
Un & car on veut modifier le
compte
Une flèche plutôt qu’un point car c’est un pointeur… Plus de détails
dans 1-2 mois
![Page 41: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/41.jpg)
class Compte{
int solde;int numero;string proprietaire;
public :void creation(int, string);void depot(int);void retrait(int);void virement(compte&, int);
};…main(void){
Compte c1, c2;c1.creation(123, "Robert");c2.creation(333, "Michel");c2.depot(500);c2.virement(c1,300);
}
BTS IRIS 1ère année POO 41
![Page 42: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/42.jpg)
MéthodesChaque méthode étant liée à sa classe, il est
possible que des méthodes ayant la même même signaturesignature (même nom, même nombre et types de paramètres) soient définies dans des classes différentesclasses différentes
La surchargesurcharge des méthodes est possible dans une classe (même nom, mais liste de paramètres différente)
BTS IRIS 1ère année POO 42
![Page 43: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/43.jpg)
Affectation d’objetIl est possible d’affecter à un objet la valeur
d’un autre objet :Compte c1, c2;…c1 = c2;
Recopie l’ensemble des valeurs des attributsAttention : comportement parfois incohérentUtilisationUtilisation d’un constructeur de copie (d’un constructeur de copie (voir voir
plus loinplus loin))
BTS IRIS 1ère année POO 43
![Page 44: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/44.jpg)
Constructeur et DestructeurEn général, il est nécessaire de faire appel
à une méthode pour initialiserinitialiser les valeurs des attributs (ex : creation(int, string);)
Le constructeur permet de traiter ce problème à la déclaration de l’objet
Le destructeur est appelé lorsque l’objet est supprimé
BTS IRIS 1ère année POO 44
![Page 45: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/45.jpg)
Constructeur Méthode appelée automatiquement à chaque création d’objetLe constructeur porte le même nom que la classe
Exemple :
class Compte{int solde;int numero;string proprietaire;
public :Compte(int, string);void depot(int);void retrait(int);
}; BTS IRIS 1ère année POO 45
Compte::Compte(int num, string prop){
numero = num;proprietaire=prop;solde = 0;
}
main(void){
Compte c1(123, "Robert");}
![Page 46: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/46.jpg)
UtilisationÀ partir du moment où une classe possèdepossède un
constructeur, il n’est plus possible plus possible de créer un objet sans fournir les arguments sans fournir les arguments requis par son constructeurLa déclaration Compte c1; ne convient plusL’utilisateur est obligé de donner des valeurs
d’initialisation
L’utilisation de constructeur est fortement L’utilisation de constructeur est fortement recommandéerecommandée
BTS IRIS 1ère année POO 46
![Page 47: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/47.jpg)
UtilisationLe travail réalisé par le constructeur peut-
être plus élaboréélaboré qu’une simple initialisationAffectation de valeur fabriquée au hasardAllocation dynamique de mémoire (encore les
pointeurs qu’on verra plus tard)
BTS IRIS 1ère année POO 47
![Page 48: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/48.jpg)
Exemple #include<iostream>#include<cstdlib>using namespace std;
class Hasard{
double val[10];public:
Hasard(int);void affiche();
};
Hasard::Hasard(int max){
int i;for (i=0; i<10; i++)
val[i] = double (rand()) / RAND_MAX * max;}
BTS IRIS 1ère année POO 48
main(void){
Hasard suite1(5);suite1.affiche();Hasard suite2(12);suite2.affiche();
}
![Page 49: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/49.jpg)
DestructeurMéthode appelée automatiquementappelée automatiquement au
moment de la destruction de l’objet (fin de la fonction, boucle… où l’objet a été créé)
Porte le même nom que la classe précédé d’un tilde (~)
Ne dispose d’d’aucun argumentaucun argument et ne renvoie pas de valeur
Un destructeur devient indispensableindispensable lorsque l’objet alloue de la mémoire mémoire dynamiquementdynamiquement
BTS IRIS 1ère année POO 49
![Page 50: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/50.jpg)
Exemple #include<iostream>using namespace std;
class Matiere{
string nom;string prof;int nbElevesstring *eleves;float *notes;public:
Matiere(int, string, string);~Matiere();bool
validiteMotDePasse(string);void saisirNote();void modifierNote(string);void afficherNotes();void afficherMoyenne();
};
Matiere::Matiere(int nb, string n, string p){
nbEleves = nb;eleves = new string [nbEleves ];notes = new float [nbEleves ];nom = n;prof = p;
}
Matiere ::~ Matiere(){
delete eleves;delete notes;
}
main(void){
Matiere info(11, « info », « lelore »);
}
BTS IRIS 1ère année POO 50
![Page 51: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/51.jpg)
Objets et tableauxComme tous les types, il est possible de
définir des tableaux d’objetsSi des constructeurs ont été définis
C’est le constructeur sans arguments qui est appelé il faut donc qu’il existe !il faut donc qu’il existe !
Il est possible de faire appel à un constructeur particulier, mais dans ce cas, il faut le préciser pour tout les éléments !pour tout les éléments !
BTS IRIS 1ère année POO 51
![Page 52: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/52.jpg)
Exemple class maClasse{string nom;public :
maClasse();maClasse(string);void affiche();
};maClasse::maClasse(){nom="inconnue";
}maClasse::maClasse(string s){nom = s;
}
BTS IRIS 1ère année POO 52
void maClasse::affiche()void maClasse::affiche(){{
cout << nom;cout << nom;}}main()main(){{maClasse tab1[5];maClasse tab1[5];maClasse maClasse
tab2[2]={ maClasse("c0"), tab2[2]={ maClasse("c0"), maClasse("c1") };maClasse("c1") };
for (int i=0; i<5; i++)for (int i=0; i<5; i++)tab1[i].affiche();tab1[i].affiche();
for (int i=0; i<2; i++)for (int i=0; i<2; i++)tab2[i].affiche();tab2[i].affiche();
}}
![Page 53: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/53.jpg)
class maClasse{string nom;public :
maClasse();maClasse(string);void affiche();
};maClasse::maClasse(){nom="inconnue";
}maClasse::maClasse(string s){nom = s;
}
BTS IRIS 1ère année POO 53
void maClasse::affiche()void maClasse::affiche(){{
cout << nom;cout << nom;}}main()main(){{maClasse tab1[5];maClasse tab1[5];maClasse maClasse
tab2[2]={ maClasse("c0"), tab2[2]={ maClasse("c0"), maClasse("c1") };maClasse("c1") };
for (int i=0; i<5; i++)for (int i=0; i<5; i++)tab1[i].affiche();tab1[i].affiche();
for (int i=0; i<2; i++)for (int i=0; i<2; i++)tab2[i].affiche();tab2[i].affiche();
}}
inconnueinconnueinconnueinconnueinconnuec0c1
Exemple
![Page 54: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/54.jpg)
Attributs de classeÀ priori, les différents objets d’une même
classe possèdent leurs propres attributspropres attributsPossibilité de permettre aux objets d’une
même classe de partager une donnée : attributs de classeattributs de classe
Un attribut de classe est un attribut indépendantindépendant de toute instance de classe (Sorte de variable globale variable globale limitée à une classe)
BTS IRIS 1ère année POO 54
![Page 55: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/55.jpg)
Utilisation class MaClasse{int normal;static string global;public :MaClasse(int);
};
MaClasse::MaClasse(int a){ normal = a;
}
string MaClasse::global = "MaClasse";
BTS IRIS 1ère année POO 55
MaClasse a, b;
a.normal b.normal
a.global b.global
Objet a Objet b
![Page 56: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/56.jpg)
Exempleclass Compte{
int solde;int numero;string proprietaire;static int nbComptes;
public :Compte(int, string);~Compte();void depot(int);void retrait(int);
};
main(void){
Compte c1(120,"Robert");Compte c2(333,"Georges");
}
POO 56
int Compte::nbComptes = 0;
Compte::Compte(int num, string prop){
numero = num;proprietaire = prop;solde = 0;nbComptes = nbComptes + 1;cout << nbComptes ;
}Compte::~Compte (void){
nbComptes = nbComptes - 1;cout << nbComptes ;
}
![Page 57: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/57.jpg)
Arguments par défautPossibilité d’écrire une méthode en indiquant
quelle valeur doit prendre l’argument si rien si rien n’a été passé n’a été passé en paramètre
Permet d’écrire une fonction au lieu de deux
BTS IRIS 1ère année POO 57
![Page 58: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/58.jpg)
Exemple class Compte
{int solde;int numero;string proprietaire;static int nbComptes;
public :Compte(int, string, int = 0int = 0);void depot(int);void retrait(int);void afficheSolde();
};
BTS IRIS 1ère année POO 58
void Compte::afficheSolde(){cout<<"solde="<<solde<<endl;}
Compte::Compte(int num, string prop, int s){ numero = num; proprietaire = prop; solde = s; nbComptes = nbComptes + 1;}
1000
main(void){ Compte c1(120,"Robert", 100); Compte c2(333,"Georgres"); c1.afficheSolde(); c2.afficheSolde();}
![Page 59: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/59.jpg)
Objet argument d’une méthodeUne méthode peut avoir en paramètre des
arguments de type objetobjetC’est un argument comme les autresargument comme les autres
BTS IRIS 1ère année POO 59
![Page 60: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/60.jpg)
Exemple par valeur class Personne{string nom;int portefeuille;public :
Personne(string);void retireArgent(Compte);
};…void Personne::retireArgent(Compte c,int valeur){ portefeuille = portefeuille + c.retrait(valeur);
}
main(void){Compte c1(120,"Robert");Personne p("Robert");p.retireArgent(c1,100);
}
BTS IRIS 1ère année POO 60
![Page 61: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/61.jpg)
Exemple par référence class Personne{string nom;public :
Personne(string);void deposerCompte(Compte&,int)
};…void Personne::deposerCompte (Compte &c, int somme){ c.depot(somme);
} main(void){Compte c1(120,"Robert");Personne p("Robert");p.deposerCompte(c1, 100);
}
BTS IRIS 1ère année POO 61
![Page 62: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/62.jpg)
Objet en retour de fonctionExemple :class Banque{string nom;public :
Banque(string);Compte creerCompte();int newNum();
};…Compte Banque::creerCompte(){cout<< " quel est votre nom? " <<endl;string n;cin>>n;int num = newNum();Compte c(n,num);return c;
}
BTS IRIS 1ère année POO 62
![Page 63: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/63.jpg)
AutoréférenceLe mot clé this fait référence sur l’objet
l’ayant appeléPermet d’avoir l’adressel’adresse en mémoire de l’objetPermet de résoudre les ambigüités
BTS IRIS 1ère année POO 63
![Page 64: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/64.jpg)
Exempleclass Compte{int solde;int numero;string proprietaire;
public :Compte(int, string);void changePropriétaire(string);
};…void Compte::copie(string proprietaire){
this->proprietaire = proprietaire;this->proprietaire = proprietaire;}
BTS IRIS 1ère année POO 64
![Page 65: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/65.jpg)
Méthode de classeMéthode appartenant à une classePeut-être appelée en dehors de toute instancePeut-être appelée en dehors de toute instancePermet de créer l’équivalent d’une fonction fonction
globaleglobaleLa fonction ne peut pas accéder au pointeur pointeur
thisthis !Pas d’objet associéN’a accès qu’aux variables globales (statiques) de
la classe
BTS IRIS 1ère année POO 65
![Page 66: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/66.jpg)
Exemple class Compte{int solde;int numero;string proprietaire;static int nbComptes;
public :Compte(int, string);~Compte();static void affNbComptes();
};
BTS IRIS 1ère année POO 66
int Compte::nbComptes = 0; void Compte::affNbComptes(){
cout<<nbComptes<<endl;}
main(void){
Compte c1, c2;Compte::affNbComptes();
}
![Page 67: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/67.jpg)
Composition Une classe peut posséder un attribut d’une
autre classeSi l’attribut ne possède pas de constructeur
par défaut, un constructeur doit être définiun constructeur doit être défini Le constructeur de l’attribut est appelé avec
des arguments du constructeur de la classe
BTS IRIS 1ère année POO 67
![Page 68: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/68.jpg)
Exemple 1class Compte{int solde;int numero;string proprietaire;
public :Compte(string);
};
Compte::Compte(string s){proprietaire = s;
…}
BTS IRIS 1ère année POO 68
class Personne{
string nom;Compte c;public :
Personne(string);};Personne::Personne(string s) : c(s){
nom=s;}
void main(){
Personne p("Robert");}
![Page 69: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/69.jpg)
Exemple 2class Compte{
int solde;int numero;string proprietaire;
public :Compte(string);
};
Compte::Compte(string s){
proprietaire = s;…}
BTS IRIS 1ère année POO 69
class Personne{
string nom;Compte c;public :
Personne();};Personne:: Personne(){
cout << "quel est votre nom ? "; string n; cin>>n; nom=n; c=Compte(n);} main(void){
Personne p;}
![Page 70: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/70.jpg)
Exemple 3class Compte{
int solde;int numero;string proprietaire;
public :Compte(string);
};
Compte::Compte(string s){
proprietaire = s;…}
BTS IRIS 1ère année POO 70
class Personne{
string nom;Compte c1, c2;public :
Personne();};
Personne:: Personne(string s) : c1(s), c2(s){
nom=s;}
main(void){
Personne p(" bob ");}
![Page 71: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/71.jpg)
BTS IRIS 1ère année POO 71
HéritageHéritage
![Page 72: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/72.jpg)
Notion d’héritageUn des fondements de la POOÀ la base de la réutilisation
L’héritage autorise la définition d’une nouvelle classe dite « dérivée », à partir d’une classe existante dite « de base »
La classe dérivée hérite des caractéristiques de la classe de base auxquelles sont ajoutées ses propres caractéristiques
BTS IRIS 1ère année POO 72
![Page 73: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/73.jpg)
Notion d’héritagePlusieurs classes peuvent être dérivées
d’une même classe de baseUne classe dérivée peut devenir à son tour
classe de base d’une autre classeL’héritage multiple est autorisé par le C++,
mais reste controversécontroversé (et même déconseillé)Déclaration :
class classeDerivee : public classeDeBase{
…};
BTS IRIS 1ère année POO 73
![Page 74: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/74.jpg)
Déclaration d’une classe de baseclass Point{int x;int y;
public:void init(int, int);void deplace(int, int);void affiche();
}; BTS IRIS 1ère année POO 74
![Page 75: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/75.jpg)
Déclaration d’une classe dérivéeclass PointColore : public Point{string couleur;
public:void colore(string c){couleur = c;}
};
BTS IRIS 1ère année POO 75
![Page 76: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/76.jpg)
Conséquences le mot clé publicpublic signifie que les attributs
et méthodes publics de la classe de base resteront publics (notion classique de l’héritage)Précisé plus tard
Chaque objet de type PointColore peut alors avoir accès :Aux attributs et méthodes publics de PointColore
Aux attributs et méthodes publics de Point BTS IRIS 1ère année POO 76
![Page 77: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/77.jpg)
Exemple de programmemain(){PointColore p;p.init(10, 10);p.colore("bleu");
p.affiche();p.deplace(15, 30);p.affiche();
}
BTS IRIS 1ère année POO 77
![Page 78: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/78.jpg)
Utilisation des attributs et méthodes de la classe de baseUne classe dérivée n’a pas accès aux attributs
et méthodes privés de la classe de baseEx : impossible de définir une méthode dans la
classe pointColore qui affiche directement les valeurs des attributs x et y
Une classe dérivée (public) a accès aux attributs et méthodes publiquesEx : ajouter une méthode d’affichage à la classe pointColore
BTS IRIS 1ère année POO 78
![Page 79: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/79.jpg)
Exemple class PointColore : public Point{string couleur;
public:void colore(string c){couleur = c;}void afficheC();
};
void pointColore::afficheC(){affiche();affiche();cout << "ma couleur est : " << couleur;
}
BTS IRIS 1ère année POO 79
![Page 80: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/80.jpg)
Redéfinition de méthodeUne méthode d’une classe de base peut être
redéfinie dans une classe dérivée
class PointColore : public Point{string couleur;
public:void colore(string c){couleur = c;}void affiche();
};
void pointColore::affiche (){Point::affiche();cout << "ma couleur est : " << couleur;
}
BTS IRIS 1ère année POO 80
![Page 81: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/81.jpg)
Exemple main(){PointColore p;p.init(10, 10);p.colore("bleu");
p.affiche();p.deplace(15, 30);p.affiche();
}
BTS IRIS 1ère année POO 81
![Page 82: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/82.jpg)
Redéfinition d’attributUn attribut de classe de base peut-être redéfini
dans une classe dérivéeExemple :
class A{string couleur;
…};class B : public A{int couleur;
…};
BTS IRIS 1ère année POO 82
![Page 83: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/83.jpg)
Constructeurs et destructeursLes constructeurs et destructeurs ne sont pas
hérités
Pour créer un objet de type dérivé :Appel au constructeur de la classe de baseAppel au constructeur de la classe dérivée
Lors de la destruction d’un objet de type dérivé :Appel du destructeur de la classe dérivéeAppel du destructeur de la classe de base
Automatique, pas d’appel explicite BTS IRIS 1ère année POO 83
![Page 84: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/84.jpg)
transmission d’informationSi le constructeur de la classe de base
nécessite des arguments, il faut lui transmettre à partir du constructeur de la classe dérivée
Il faut alors utiliser une syntaxe précise :On appelle le constructeur de la classe mère
BTS IRIS 1ère année POO 84
![Page 85: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/85.jpg)
Exemple classe de base class Point{int x;int y;
public:Point(int, int);void deplace(int, int);void affiche();
}; BTS IRIS 1ère année POO 85
![Page 86: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/86.jpg)
Exemple classe dérivée class PointColore : public Point{string couleur;
public:PointColore(int, int, string);void colore(string c){couleur = c;}void afficheC();
};
PointColore::PointColore(int a, int o , string c):Point(a, o){couleur = c;
}
BTS IRIS 1ère année POO 86
![Page 87: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/87.jpg)
Contrôle des accèsHéritage public :
La classe dérivée a accès aux attributs et méthodes publics de la classe de base
Les « utilisateurs » de la classe dérivée ont accès à ses attributs et méthodes publics, ainsi que ceux de sa classe de base
Autorisation d’accès peut-être définie :Lors de la conception de la classe de baseLors de la conception de la classe dérivée
BTS IRIS 1ère année POO 87
![Page 88: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/88.jpg)
Niveaux d’accèsPublique (public): accessible de n’importe
oùPrivé (private): accessible uniquement à
l’intérieur de la classe où il est définiProtégé (protected):
Privé pour les utilisateurs de la classePublic pour la classe dérivée elle même
BTS IRIS 1ère année POO 88
![Page 89: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/89.jpg)
Exempleclass A{string s1;protected string s2;…
};class B : public A{void affiche();
…};B::affiche(){cout << s1;cout << s2;
}
BTS IRIS 1ère année POO 89
![Page 90: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/90.jpg)
Dérivation privéeIl est possible d’interdire à un utilisateur
d’une classe dérivée l’accès aux membres publics de sa classe de base
class classeDerivee : private classeDeBase{
…}
BTS IRIS 1ère année POO 90
![Page 91: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/91.jpg)
Exemple class Point{…public:
Point(int, int);void deplace(int, int);void affiche();
};class PointColore : private Point{…public:
PointColore(int,int,string)void colore(string);
};main(){
pointColore p (10, 10,"bleu");p.deplace(15, 30);p.affiche();
}
BTS IRIS 1ère année POO 91
![Page 92: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/92.jpg)
Dérivation protégéePossibilité de dérivation intermédiaireintermédiaire entre
dérivation publique et privéeLes membres publics de la classe de base
seront considérés comme protégés lors de dérivation ultérieures
BTS IRIS 1ère année POO 92
![Page 93: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/93.jpg)
BTS IRIS 1ère année POO 93
Surdéfinition Surdéfinition d’opérateursd’opérateurs
![Page 94: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/94.jpg)
Surdéfinition d’opérateurs Surdéfinition de méthode (ou fonction) :
attribuer le même nomattribuer le même nom à des méthodes (ou fonctions) différentes
Lors d’un appel le choixchoix de la méthode est fait par le compilateurcompilateur en fonction du type et du nombre d’arguments
Le C++ permet également de surdéfinir des opérateurs existant
BTS IRIS 1ère année POO 94
![Page 95: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/95.jpg)
Mécanisme Définir une méthode de nom operator suivie
du symbole de l’opérateurElle prend en argument les objets sur
lesquels l’opération a lieu et retourne le résultat de l’opération
Exemple : définir la somme de 2 Points à l’aide de l’opérateur +
BTS IRIS 1ère année POO 95
![Page 96: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/96.jpg)
Exemple class Point{
int x;int y;
public:Point(int a=0, int o=0){x=a;y=o;}Point operator + (Point);
}Point Point::operator + (Point a){
Point p;p.x = x + a.getX();p.y = y + a.getY();return p;
}main(){
Point p1(2,2);Point p2(5,3);Point p3;p3 = p1 + p2;p3 = p1 + p2 + p3;
}
BTS IRIS 1ère année POO 96
![Page 97: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/97.jpg)
BTS IRIS 1ère année POO 97
PolymorphismePolymorphisme
![Page 98: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/98.jpg)
ConversionSoit la classe B dérivée de A
les membres de A sont membres de B Les membres publics de A peuvent être atteints à travers
un objet Btous les services offerts par un A sont offerts par tous les services offerts par un A sont offerts par
un Bun B
=> là où un A est prévu, on doit pouvoir mettre un B
la conversion (explicite ou implicite) d'un objet de type B vers le type A a le statut de conversion standard
BTS IRIS 1ère année POO 98
![Page 99: La programmation par Objets](https://reader035.vdocuments.net/reader035/viewer/2022062501/56815e09550346895dcc6507/html5/thumbnails/99.jpg)
Exempleclass Point {
int x, y;public:Point(int, int);...
};class Pixel : public Point{ // pixel = point coloré
string couleur;public:Pixel(int, int, string);...
};Main(){
Pixel px(1, 2, "rouge");Point pt = px;
}
BTS IRIS 1ère année POO 99