Vous êtes sur la page 1sur 22

Plan

Classes
Droit daccs aux donnes Dfinition des fonctions Instances de classe (appel dobjet)

Hritage
Organisation du programme

Classe : Syntaxe
Une classe en C++ est dfinie comme suit :

Class nom_classe { droit_acces : donnes droit_acces : Fonctions };

//nomination de la classe

// droit daccs aux donnes // variables usuelles

// dclarations des fonctions // spcifiques la classe

Classes : Droit daccs aux donnes


Trois modes daccs aux donnes dune classe:
Public : accs permis partir de nimporte quel point du programme Private : Seules les mthodes de la classe peuvent accder au membre "priv" mode par dfaut Protected : proprit lie lhritage : les donnes et les fonctions de la classe mre ne sont accessibles que par les mthodes de la classe drive.

Exemple
class voiture { private : char marque[20]; int nbre_places; float kilometrage; public:
void deplacement(float x); void capacite(int i); };

Classes : dfinition des fonctions


Les fonctions sont dfinies de la mme manire que les fonctions

ordinaires
Les fonctions peuvent accder aux donnes sans les passer en paramtre (Cas de la programmation classique).

La fonction est indexe par le nom de sa classe suivi de loprateur de porte (::)
Syntaxe :

Type_fonction nom_classe :: nom_fonction (type var,) { Instructions; }

Exemple
void Class voiture { voiture::deplacement(float x) private : { kilometrage +=x; char marque[20]; } int nbre_places; float kilometrage;
public: void voiture::capacite(int i) void deplacement(float x); { void capacite(int i); nbre_places +=i; }; }

Hritage
Lhritage permet de dfinir une nouvelle classe partir dune classe existante. Les donnes et les fonctions de la classe existante sont automatiquement hrites par la nouvelle classe.

Syntaxe :
class nouvelle_classe : mode_derivation ancienne_classe { };

Exemple
class camion::chargement(float x) void camion : public voiture { { private x; Poids = : float poids; } char marchandise[20]; public:
void chargement(float x); void camion::nom_marchandise() void nom_marchandise(); { }; Puts(saisir le nom de la marchandise); Gets(marchandise); }

Organisation du programme
Universit

Facult

cole

Licence

Master

Ingnieur

Master

Bibliothque

Organisation du programme
Facult
noms notes

Licence
noms notes prof

Saisie_prof() Saisie_noms() affichage() Envoi_noms() Reception_notes() Saisie_notes() affichage() Reception_noms() Envoi_notes()

Organisation du programme Classe facult


class faculte { private : char noms[3][20]; // 3 etudiants pour simplifier float notes[3]; // 3 notes public : void saisir(); char *envoi_noms(); void reception_notes(float *n); void affichage(); };

Organisation du programme Fonctions de la classe facult


void faculte :: saisir() { for(int i=0;i<3;i++) { cout<<"entrer le nom de l'etudiant "<<(i+1); gets(noms[i]); } }
noms

Remplissage du tableau noms

Organisation du programme Fonctions de la classe facult


char *faculte :: envoi_noms() { char *p=new char[60]; for(int i=0;i<3;i++) { strcpy(p,noms[i]); p+=20; } p-=60; return p; }
P

noms

Organisation du programme Fonctions de la classe facult


void faculte :: reception_notes(float *m) { for(int i=0;i<3;i++) { notes[i]=*m; m++; notes } }

Organisation du programme Fonctions de la classe facult

void faculte :: affichage() { puts("*****scolarite******"); for(int i=0;i<3;i++) cout<<noms[i]<<" "<<notes[i]<<"\n"; puts("********************"); }

Organisation du programme Classe licence


// rend toutes le
class licence : private faculte { private : char nom_prof[20]; public : void saisir_prof(); void saisie_notes(); float *envoi_notes(); void reception_noms(char *x); void affichage(); }; // donnes et // les mthodes de // la classe // facult // prives (le but // est de dsactiver // les mthodes de // la classe facult // hrits par la

// classe licence

Organisation du programme Fonctions de la classe licence


void licence :: saisir_prof() { cout<<"saisir le nom du professeur "; gets(nom_prof); }

void licence :: saisie_notes() { for(int i=0;i<3;i++) { cout<<"saisir la note de l'etudiant "<<noms[i]<<" "; cin>>notes[i]; } }

Organisation du programme Fonctions de la classe licence


void licence :: reception_noms(char *x) { for(int i=0;i<3;i++) noms { strcpy(noms[i],x); x+=20; } }

Organisation du programme Fonctions de la classe licence


float *licence :: envoi_notes() { float *f=new float[3]; for(int i=0;i<3;i++) { *f=notes[i]; f++; } f f-=3; return f; }

notes

Organisation du programme Fonctions de la classe licence

void licence :: affichage() { puts("******licence*******"); for(int i=0;i<3;i++) cout<<noms[i]<<" "<<notes[i]<<"\n"; puts("********************"); }

Programme principal
#include <stdio.h> #include <iostream.h> #include <string.h> #include <stdlib.h> // classes dclares prcdemment main() { faculte f1; // f1 est un objet de classe facult licence l1; // l1 est un objet de classe licence f1.saisir(); // saisie des noms dans f1 l1.saisir_prof(); // saisie du nom de prof dans l1 l1.reception_noms(f1.envoi_noms()); //transfert des noms l1.saisie_notes(); // saisie des notes dans l1 f1.reception_notes(l1.envoi_notes()); // transfert des // notes l1.affichage(); // affichage des noms et notes de l1 f1.affichage(); // affichage des noms et notes de f1 system("PAUSE"); }