1 Tableaux des objets C++ si on connaît le nombre dobjets nécessaires davance on peut utiliser des tableau dobjets dans les fonctions dusage class Personne.

Slides:



Advertisements
Présentations similaires
POO par Jenny Benois-Pineau 25/03/2017.
Advertisements

Cours n° 7 Standard Template Library II.
C++ 6ème cours Patrick Reuter maître de conférences
Spécialisation/généralisation Héritage Polymorphisme.
Spécialisation/généralisation Héritage Polymorphisme
1 Quelques précisions sur l'héritage. 2 Signification de super.f() appel à la méthode f() masquée super : désigne l'objet appelant comme s'il était de.
(Classes prédéfinies – API Java)
C.
JAV - TD 6 Structures de données JAVA
Programmation Orientée Objet (POO)
FLSI602 Génie Informatique et Réseaux
CYCLE 6 : FONCTIONS FONCTIONS avec paramètres en Entrée 1- Pourquoi les FONCTIONS peuvent échanger des données en E entre elles ? 2- Comment écrire des.
1 Une introduction à Java IFT 287 (Semaine 1). 2 Java - Historique Développé par Sun Microsystems en 1994 –Inventeur James Gosling (canadien!) Objectif.
2ième Classe (Mercredi, 13 Octobre) C++ Intro CSI2572.
Regrouper des éléments de même type et pouvoir y accéder à laide dun identificateur et dun indice. Objectif des tableaux.
Badr Benmammar Programmation concurrente et temps réel en Java Badr Benmammar
Leçon 6 : Structures de données dynamiques IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier.
Chapitre VIII Structures dobjets. Chapitre VIII - Structures d'objets2 Structures d objets Il existe plusieurs relations entre les classes. Lhéritage.
Les Classes les structures en C (struct) regroupent des variables : structuration de l'analyse mais problèmes de cohérence problèmes de sécurité d'accès.
77 Utilisation des classes (suite). 7-2 Objectifs A la fin de ce cours, vous serez capables de : Définir des méthodes surchargées dans une classe Fournir.
Leçon 2 : Surcharge des opérateurs IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
Conteneurs STL.
Badr Benmammar Programmation concurrente et temps réel en Java Badr Benmammar
Cours 6 Interfaces, classes imbriquées (début). Chapitre IV Interfaces, classes imbriquées, Object.
Cours 4 Héritage (suite).
COURS DE PROGRAMMATION ORIENTEE OBJET :
COURS DE PROGRAMMATION ORIENTEE OBJET :
Les pointeurs en C. valeur : main () { float valeur; void* pointeur; }
1 Fonction : surcharge de sélection La surcharge de sélection consiste à implanter plusieurs méthodes de même nom dans une même classe à condition que.
Héritage Lhéritage permet de spécialiser une classe en définissant une relation de type « est une sorte de ». #include comptebancaire.h class CompteEpargne.
C++ : fonctions et opérateurs
CSI1502 Principes fondamentaux en conception des logiciels
Leçon 1 : notion dobjet IUP Génie Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
Une introduction à Java
Programmation Orienté Objet en C++ Ricard julien.
Structures de données IFT-2000
Cours 7 Divers et exceptions. Chapitre V Enumeration, tableaux, conversion de types, noms.
1 Exemples Construction et implantation de types de données abstraits.
AP4 - Programmation Orientée Objet Chapitre 3 : Programmation Objet en C++ class Entier { int i; int lit_i(void); void Ecrit_i(int); }; int Entier::lit_i(void)
Les collections. Gestion d’ensembles d’objets Tableaux Taille fixe Pas de manipulation aisée des objets dans le tableaux Base tab1[]= new Base[5]; for(int.
4 Introduction des objets. Les chaînes et tableaux
Les Pointeurs et les Tableaux Statiques et Tableaux Dynamiques
LIFI-Java 2004 Séance du Mercredi 22 sept. Cours 3.
La notion de type revisitée en POO
11/04/ L'héritage Cours 7 Cours 7.
Notions avancées du C++
Argc et argv Utilisation des paramètres de la ligne de commande.
1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée.
Cours C++ Fonctions Surcharge d’opérateurs Passage d’arguments
Tutorat en bio-informatique
5ième Classe (Mercredi, 19 octobre) Prog CSI2572.
Constructeurs H Batatia. Variable statique Une variable statique est partagée par tous les objets d’une classe.
Réaliser par: Sadok Amel Cheboui hassiba
Les opérateurs L’amitié Les opérateurs Introduction
Les surcharges d'opérateurs
TABLEAUX des POINTEURS TRAITEMENT DE STRUCTURES
8PRO100 Éléments de programmation Les pointeurs de caractères.
Cours du 5 novembre.
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Conception de Programmes - IUT de Paris - 1ère année – Cours 6 - Les opérateurs L’amitié Les opérateurs –Introduction –Surcharge par fonction.
Chapitre VII Techniques plus avancées à travers le concept de classe.
LIFI-Java 2004 Séance du Mercredi 29 sept. Cours 4.
Conception de Programmes - IUT de Paris - 1ère année Quelques éléments du langage C++ Les références La surcharge de fonctions Les fonctions «
Les objets de la classe de classe. Qu'est-ce que c'est? C'est...
Langage de Programmation Orientée Objet : C++
Conception de Programmes - IUT de Paris - 1ère année Les classes Introduction Déclaration d’une classe Utilisation d’une classe Définition des.
BlueJ_III 1 Java, les objets : tout de suite ! Interaction entre objets Notes de cours associées au chapitre 3 tutorial BlueJ
Int 10. Int 6.
QCM Pointeurs 2 / Q1 On considère la déclaration suivante : char *ptc ; ptc peut contenir : 1) des valeurs de variables de type caractère 2) des adresses.
Transcription de la présentation:

1 Tableaux des objets C++ si on connaît le nombre dobjets nécessaires davance on peut utiliser des tableau dobjets dans les fonctions dusage class Personne { private : char Nom[Nmax]; char Societe[Nmax]; public : Personne(){Nom[0]=`\0`; Societe[0]=`\0`;} Personne(char*, char*); Personne(const Personne& p) void ModifSociete(char *); void SePresente(); }; Personne::Personne(const Personne& p){ strcpy(Nom,p.Nom); strcpy(Societe,p.Societe); } …. int main() { Personne * groupe=new Personne[Ngr]; // Uniquement le constructeur sans arguments! for(int i=0;i<Ngr;i++) { groupe[i].SePresente(); groupe[i].ModifSociete("ABC"); groupe[i].SePresente(); } return 0; }

23/02/ Héritage C++ Héritage simple Héritage multiple Java Héritage simple Spécialisation Héritage simple : la structure hiérarchique des classes, possibilité de dériver les uns des autres, évolutivité du code.

23/02/ Exemples Garage Véhicule CamionVoitureclasse – agrégat « container » classe-parent classes-enfants

4 Héritage simple class Vehicule{ protected : int puissance; int nbr_places; int vol_moteur; public : Vehicule(int _p=4, int _n=5, int _v=3); void Affiche() {cout<< Puissance = <<puissance<<places = <<nbr_places<<volume=<<vol_moteur;} }; Vehicule:: Vehicule(int _p=4, int _n=5, int _v=3){ puissance=_p; nbr_places=_n; vol_moteur=_v; } …. class Camion::public Vehicule { protected : int vitesse_autorisee; public : Camion(int _p=8, int _n= 4, int _vol=6, int _vit=80):Vehicule(_p,_n,_vol){vitesse_autorisée=_vit;} //Il faut définir un constructeur! void affiche() }; void Camion::affiche(){ cout<<puissance=<<puissance; cout<<nbr_places=<<nbr_places; cout<<vol_moteur=<<vol_moteur; cout<<vitesse_autorisée=<<vitesse_autorisee; }

5 Utilisation des méthodes de la classe parente (2) class Vehicule{ protected : int puissance; int nbr_places; int vol_moteur; public : Vehicule(int _p=4, int _n=5, int _v=3); void affiche() {cout<< Puissance = <<puissance<<places = <<nbr_places<<volume=<<vol_moteur;} }; Vehicule:: Vehicule(int _p=4, int _n=5, int _v=3){ puissance=_p; nbr_places=_n; vol_moteur=_v; } …. class Camion:public Vehicule { protected : int vitesse_autorisee; public : Camion(int _p=8, int _n= 4, int _vol=6, int _vit=80):Vehicule(_p,_n,_vol){vitesse_autorisée=_vit;} //Il faut définir un constructeur! void affiche() }; void Camion::affiche(){ Vehicule::affiche(); cout<<vitesse_autorisée=<<vitesse_autorisee; } //une fonction- membre dune classe dérivée nintroduit pas une surcharge, mais un masquage des fonctions homonymes héritées. // si la classe dérivée ne dispose pas de méthode appelée, la fonction executée sera alors celle de la classe ascendante la plus proche.

6 Héritage simple. Utilisation des méthodes de la classe parente class Vehicule{ protected : int puissance; int nbr_places; int vol_moteur; public : Vehicule(int _p=4, int _n=5, int _v=3); void Affiche() {cout<< Puissance = <<puissance<<places = <<nbr_places<<volume=<<vol_moteur;} }; Vehicule:: Vehicule(int _p=4, int _n=5, int _v=3){ puissance=_p; nbr_places=_n; vol_moteur=_v; } …. class Camion:public Vehicule { protected : int vitesse_autorisee; public : Camion(int _p=8, int _n= 4, int _vol=6, int _vit=80):Vehicule(_p,_n,_vol){vitesse_autorisée=_vit;} //Il faut définir un constructeur! void affiche() }; void Camion::affiche(){ Vehicule::affiche(); cout<<vitesse_autorisée=<<vitesse_autorisee; } //une fonction- membre dune classe dérivée nintroduit pas une surcharge, mais un masquage des fonctions homonymes héritées. // si la classe dérivée ne dispose pas de méthode appelée, la fonction executée sera alors celle de la classe ascendante la plus proche.

7 Héritage simple. Utilisation des méthodes de la classe parente class Carre { protected: int a; public: Carre(int _a=10){a=_a;} void affiche() {cout<<"a="<<a<<endl;} }; class Rectangle : public Carre{ protected: int b; public: Rectangle(int _a=2, int _b=3):Carre(_a){b=_b;} void Homotetie(int k){a=a*k;b=b*k;} }; class Parallelogramme : public Rectangle{ protected: float alpha; public: Parallelogramme(int _a, int _b, float _alpha): Rectangle(_a,_b){alpha=_alpha;} }; #include #include "Carre.hpp" int main(){ Carre C(2); Parallelogramme P(4,3,(float)1.57); Rectangle R(1,6); C.affiche(); P.affiche(); R.affiche(); P.Homotetie(4); P.affiche(); return 0; } (1)Résultat? (2)Affiche?

23/02/ Appel des constructeurs et des destructeurs Lors de linstanciation dun objet dune classe dérivée, les constructeurs parents sont appelés dans lordre de leur déclaration Lors de la destruction de cet objet, les destructeurs parents sont appelés mais dans lordre inverse.

9 Héritage simple. Constructeurs et destructeurs class Carre { protected: int a; public: Carre(int _a=10){a=_a;} void affiche() {cout<<"a="<<a<<endl;} }; class Rectangle : public Carre{ protected: int b; public: Rectangle(int _a=2, int _b=3):Carre(_a){b=_b;} void Homotetie(int k){a=a*k;b=b*k;} }; class Parallelogramme : public Rectangle{ protected: float alpha; public: Parallelogramme(int _a, int _b, float _alpha): Rectangle(_a,_b){alpha=_alpha;} }; #include #include "Carre.hpp" int main(){ Carre C(2); //cons. Carré Parallelogramme P(4,3,(float)1.57); //dans lordre sont appelés les //constructeurs de Carre, puis //Rectangle et enfin Parallelogramme Rectangle R(1,6); //dans lordre sont appelés les //constructeurs de Carre puis //de Rectangle C.affiche(); P.affiche(); R.affiche(); P.Homotetie(4); P.affiche(); return 0; }

10 Le constructeur par copie et lhéritage(1) (1) La classe dérivée na pas défini le constructeur par copie class Parent { protected: int a; public: Parent(int _a){a= _a;cout<<"Je construis Parent a= "<<a<<endl;} ~Parent(){cout<<" Je detruis Parent"<<endl;} }; class Enfant : public Parent { protected : int b; public : Enfant(int _a,int _b): Parent(_a){b=_b; cout<<"Je construis Enfant b= " <<b<<endl;} void aff(){cout<<"aff:a="<<a <<" b="<<b<<endl;} ~Enfant(){cout<<"Je detruis Enfant <<endl;} }; #include #include "A.h using namespace std; int main(){ Enfant e(2,3); Enfant b(e); e.aff(); b.aff(); return 0; } Resultats Je construis Parent a=2 Je construis Enfant b=3 aff:a= 2 b=3 Je detruis Enfant Je detruis parent Je detruis Enfant Je detruis parent Appel des constructeur par copie par défaut ( pour la partie Parent et pour la partie propre Enfant)

11 Le constructeur par copie et lhéritage(2) (2) La classe dérivée a défini le constructeur par copie class Parent { protected: int a; public: Parent(int _a){a= _a;cout<<"Je construis Parent a= "<<a<<endl;} ~Parent(){cout<<" Je detruis Parent"<<endl;} }; class Enfant : public Parent { protected : int b; public : Enfant(int _a,int _b): Parent(_a){b=_b; cout<<"Je construis Enfant b= " <<b<<endl;} Enfant (const Enfant &e):Parent(e){b=e.b; cout<<"Constructeur par copie Enfant"<<endl;} void aff(){cout<<"aff:a="<<a <<" b="<<b<<endl;} ~Enfant(){cout<<"Je detruis Enfant <<endl;} }; #include #include "A.h using namespace std; int main(){ Enfant e(2,3); Enfant b(e); e.aff(); b.aff(); return 0; } Resultats Je construis Parent a=2 Je construis Enfant b=3 Constructeur par copie Enfant aff:a= 2 b=3 Je detruis Enfant Je detruis parent Je detruis Enfant Je detruis parent Appel des constructeur par copie par défaut ( pour la partie Parent et celui défini pour la partie propre Enfant)

23/02/ Derivation publique et dérivation privée Statut dans AAccès par B et amies Accès par les utilisateurs de B N.Statut dans la clase dérivée en cas de nouvelle dérivation publicoui public protectedouinonprotected privatenon private class B : public A{…}

23/02/ Dérivation privée class B : private A Interdire à un utilisateur dune clase dérivée laccès aux membres publics de sa classe de base Quand est ce que cela est intéressant? -ex 1. Lorsque toutes les fonctions utiles de la classe de base sont redéfinies dans la classe dérivée. On interdit laccès aux anciennes fonctions -ex2. Les clases sont les mêmes, mais leur usage est différent.

14 La dérivation privée class Parent { protected: int a; public: Parent(int _a){a= _a;cout<<"Je construis Parent a= "<<a<<endl;} void AffCoucou(){cout<<« Coucou »<<endl; ~Parent(){cout<<" Je detruis Parent"<<endl;} }; class Enfant : private Parent { protected : int b; public : Enfant(int _a,int _b): Parent(_a){b=_b; cout<<"Je construis Enfant b= " <<b<<endl;} Enfant (Enfant &e):Parent(e){b=e.b; cout<<"Constructeur par copie Enfant"<<endl;} void aff(){cout<<"aff:a="<<a <<" b="<<b<<endl;} ~Enfant(){cout<<"Je detruis Enfant <<endl;} }; #include #include "A.h using namespace std; int main(){ Enfant e(2,3); //Enfant b(e); e.aff(); e.AffCoucou(); //b.aff(); return 0; } Erreur de compilation : cannot access public member declared in class 'Parent'

23/02/ Opérations entre classes de même famille(1) Héritage public class Carre {class Rectangle : public Carre{ } Carre C; Rectangle R; C=R; Parent=Enfant – possible, linverse – non Cette affectation entraîne une conversion R dans le type C, cest à dire on ne conserve que la donnée- membre a de R.

23/02/ Opérations entre classes de même famille. Pointeurs(2) Héritage public class Carre { class Rectangle : public Carre{ } Carre * pC; Rectangle * pR; pC=pR; - possible une conversion pR dans le type pC pR=(Rectangle *) pC; - possible uniquement avec le cast explicite