Académique Documents
Professionnel Documents
Culture Documents
2
Exemple......................................................................................................................................3
Extensions C++...........................................................................................................................4
Les classes.................................................................................................................................14
introduction aux classes............................................................................................................15
Classes et allocation..................................................................................................................27
Notions avancées.......................................................................................................................40
Dérivation et heritage................................................................................................................46
Les patrons de fonctions et de classes ......................................................................................53
Surcharge des opérateurs..........................................................................................................58
Conversion de classe.................................................................................................................63
Méthodes virtuelles...................................................................................................................64
Heritage multiple.......................................................................................................................67
Heritage ou composition...........................................................................................................69
Les exceptions...........................................................................................................................71
Complément..............................................................................................................................75
Propriétés et identificateur........................................................................................................79
LANGAGE C++ 1
INTRODUCTION
Historique
C++ est un langage dérivé du C (ATT 1980)
• Avec des types de données abstraits.
• C++ est un Langage Orienté Objet.
• Amélioration des structures du C.
Les enjeux
Une nouvelle approche du développement ...
La réutilisation
Notes
LANGAGE C++ 2
EXEMPLE
HELLO WORLD
Langage C
#include <stdio.h>
void main()
{
printf ( ″ hello world\n ″ ) ;
}
Langage C++
#include <iostream.h>
void main()
{
cout << ″ hello world\n ″ << endl ;
}
Iostream.h
cout << ″ entrez DEUX nombres ″ << endl ;
cin >> A >> B ;
cout << ″ La somme de A + B = ″ << A+B << endl ;
Notes
LANGAGE C++ 3
EXTENSIONS C++
Quelques nouveautés
Les commentaires
/* ceci est un commentaire C */
// ceci est commentaire C++
Notes
EXTENSIONS C++ 4
Les entrées , sorties
Surdéfinition des opérateurs >> et << pour s’adapter au format.
Entrées
Caractère :
char c ;
cin >> c ; /* ou */ cin.get(c) ;
cout << c ; /* ou */ cout.put(c) ;
Chaîne :
char tab[100] ;
cin >> tab ; // attention taille [100]
cin.get(tab,100,’\n’) ;
//get place un ‘\0’ en fin de chaîne
//second argument, n-1 caractères seront lus
//troisieme argument précise le caractère de fin
//attention : ‘\n’ reste toujours dans le buffer
Notes
EXTENSIONS C++ 5
Notes
EXTENSIONS C++ 6
Les déclarations de variables
En C les déclarations se font en début de bloc.
En C++ l’emplacement des déclarations est libre.
void main()
{
..... // i n’est pas connu
for ( int i = 0 ; i < 5 ; i++)
{ // i est connu
int y ; // y est connu
}
... //i n’est plus connu:(attention pas toujours)
// y n’est plus connu
}
void main(){
int numero = 50; //variable locale
cout << numero<< endl; //sur variable locale
cout << ::numero<< endl; //sur variable globale
}
Notes
EXTENSIONS C++ 7
Les fonctions « inline »
Les instructions d’une fonction en ligne ou développée sont incorporées par le
compilateur à chaque appel.
Evite la perte de temps lors de l’appel.
Mais les instruction sont générées plusieurs fois.
Notes
EXTENSIONS C++ 8
l’identifiant « const »
C++ étend la notion de « const » existant en C
Ne spécifie la valeur que lors de l’initialisation.
Assure que sa valeur ne sera pas changée à l’intérieur de sa portée.
Pointeur constant
char * const pCst= ″ TOTO″ ;
pCst[2]=’t’ ; // OK !
pCst=autreChaine ; //erreur pointeur constant
Argument constant
char strlen(const char *pSrc) ;
Fonction constante
void Help() const ;
X::Help() const{...}
EXTENSIONS C++ 9
Les fonctions surchargées.
En C++, plusieurs fonctions peuvent posséder le même nom.
Le compilateur choisit la bonne fonction
par rapport à la signature de la fonction, (type et nombre d’arguments).
le type de la fonction doit toujours rester le même, (même type de retour).
L’évasion vers le C.
Annuler l’encodage des fonctions avec une directive de lien.
Notes
EXTENSIONS C++ 10
Les références.
Un nouveau type de variable C++.
int numero= 10 ;
int &ref= numero ; //reference
cout<< numero ;
cout << ref ; // même resultat
Déclarations :
char c ;
int i ;
Utilisation :
cout<< &i << &r4 ; //même adresse
Notes
REFERENCE EN C++ 11
Références et paramètres de fonction
En C les paramètres sont passés aux fonctions par valeur, et pour modifier un
paramètre, on le passe par adresse en le récupérant par un pointeur.
En C++, une troisième option : passage par référence.
struct MaStruct{
int numero ;
char nom[25] ;
} ;
main(){
MaStruct x ={5,″ toto″ };
ParVal(x) ;
ParPtr(&x) ;
ParRef(x) ;
return 0 ;
}
void ParVal(MaStruct s) // par valeur
{ cout<<endl<<s.numero<<endl<<s.nom ;
}
void ParPtr(MaStruct *s) // par pointeur
{ cout<<endl<<s->numero<<endl<<s->nom ;
}
void ParRef(MaStruct &s) // par référence
{ cout<<endl<<s.numero<<endl<<s.nom ;
}
Notes
REFERENCE EN C++ 12
Exercices (01)
Utilisation du debugger
pose de points d’arrêt
visualisation des variables
visualisation de la hiérarchie des classes « iostream »
Notes
REFERENCE EN C++ 13
LES CLASSES
Plan
Introduction aux classes
Déclaration d’une classe.
Propriétés et méthodes.
Classes template
Déclaration d’une classe générique.
Propriétés et méthodes générique.
Notions avancées
Membres statiques.
Classe et fonction « friend ».
Surcharge des opérateurs.
Les exceptions
Notes
CLASSES C++ 14
INTRODUCTION
AUX CLASSES
Notes
CLASSES C++ 15
Déclaration de la classe
class TDate{
public:
TDate(int j,int m,int a); //constructeur
~TDate(); //destructeur
void Afficher();
private:
int annee,mois,jour;
};
Notes
CLASSES C++ 16
Implementation de la classe
Fichier Header.h
Placer dans un « .h » ou un « .hpp » la définition de la classe.
Néanmoins:
La partie privée de la classe est visible.
Les propriétés inline sont visibles.
Fichier Source.cpp
Notes
CLASSES C++ 17
Visibilité des membres
Public:
Les membres public sont accessibles par tout le programme.
Les membres public définissent l’interface de la classe.
class TXX{
public:
int Calculer(int);
void Afficher();
...
Par convention: ne mettre que des méthodes en public.
Private:
Les membres privés ne sont accessibles que par les méthodes membres (ou
friend , notion vue plus tard).
class TXX{
private:
int numero;
...
Protected:
Un membre public pour une classe dérivée.
Un membre privé pour le reste du programme.
Notes
CLASSES C++ 18
Les propriétés
Accès par des méthodes membres
class TDate{
public:
TDate(int j,int m,int a); //constructeur
~TDate(); //destructeur
Notes
CLASSES C++ 19
Exemple de classe
class TDate{
public:
...
};
main(){
int i;
TDate Anniversaire(2,8,90);
...
i= Anniversaire.mois; //erreur accès private
...
i=Anniversaire.GetMois();
...
Anniversaire.SetAnnee(88);
...
return 0;
}
Mise en œuvre
Saisie d’un ensemble de dates.
Déclaration de variables TDate (locale et global).
Suivi avec les outils de DEBUGGING.
Inspection de la classe créée.
Notes
CLASSES C++ 20
Les méthodes
Accès aux propriétés membres de sa classe.
Pas d’accès aux propriétés d’une autre classe.
Sa portée est limitée à sa classe et non au fichier.
Ne peut surcharger que des méthodes membres de sa classe.
Rôle
Méthodes de gestion constructeur/ destructeur
Méthodes exécutrices liées à l’abstraction
Méthodes d’accès lire et écrire
Méthodes internes implémentations internes
Exemple
void TDate::Copier(const TDate& date){
jour=date.jour;
mois=date.mois;
annee= date.annee;
};
Notes
CLASSES C++ 21
Le constructeur
En C pas de contrôle lors de la création d’une structure.
En C++ lors de la création d’une instance (ou un objet) : appel du constructeur.
TDate::TDate();
TDate::TDate(int j,int m, int a);
TDate::TDate(const char *stDate);
TDate::TDate(const TDate& s);
Le destructeur
Fonction membre appelée automatique avant la destruction d’un objet.
Permet les libérations mémoires,...
Pas d’argument ni de type de retour.
Un seul destructeur par classe.
TDate::~TDate();
Notes
CLASSES C++ 22
Objets constants
anniversaire.SetJour(16); //erreur
class TDate{
public:
int GetJour() const; //readOnly
...
int SetJour(int j);
...
}
...
int TDate::GetJour()const{
return jour;
}
...
main(){
int i;
const TDate Anniversaire(17,7,77);
...
i= Anniversaire.GetJour();
return 0;}
Notes
CLASSES C++ 23
Exemple de classe
Résultat de Anniversaire.Copier(Anniversaire) ?
Notes
CLASSES C++ 24
Les objets membres d’une classe
Une classe peut contenir des instances comme membres.
Création de classe par composition
Déclaration
class TPersonne{
public:
...
private:
char szNom[25];
char szAdresse[100];
TDate naissance; //pas d’arguments
};
Constructeur
Attention à l’initialisation d’un objet membre.
class TPersonne{
public:
TPersonne(char*nom, char *add,int j,int m,int
a);
...
}; //------------fin classe TPersonne---------------
TPersonne::TPersonne(char*nom,char*add,int j,int m,
int a):naissance(j,m,a){
...
strncpy(szNom,nom,25);
strncpy(szAdresse,add,100);
}//-------------------------------------------------
Notes -
CLASSES C++ 25
Le constructeur « TDate » est invoqué pour l’instance naissance.
Si on ne définit pas d’initialisation de naissance, le constructeur par défaut de
« TDate » sera invoqué.
Erreur s’il n’y a pas de constructeur par défaut défini pour « TDate ».
TPersonne::TPersonne(...){
...
naissance.SetJour(27);
naissance.SetMois(7);
naissance.SetAnnee(1982);
}
Si l’instance « naissance » est déclarée en « const »
alors « init » est obligatoire.
Notes
CLASSES C++ 26
CLASSES ET
ALLOCATION
MALLOC et FREE
En C, la mémoire disponible: coreleft (pile :stackavail)
Operateur NEW
Allocation en C
malloc ne connaît pas de type d’objet alloué.
En C++
« malloc » n’est pas approprié pour allouer un objet car le constructeur de la classe
n’est pas invoqué.
On utilise l’opérateur « new » qui connaît le type de l’objet. « new » invoque
automatiquement le constructeur approprié.
Notes
ALLOCATION 27
Operateur new
Operateur DELETE
En C malloc et free
En C++ new et delete
TDate *ptr;
...
ptr = new TDate(1,2,90);
...
delete ptr;
Notes
ALLOCATION 28
NEW et DELETE
Pour des types simples
int *ptr;
ptr = new int;
...
delete ptr;
int taille;
char *ptr;
...
ptr = new char[taille];
...
delete [ ] ptr;
Notes
ALLOCATION 29
Classe avec pointeurs membres
public:
Plusieurs constructeurs
Destructeur
Lire un caractère TString::GetChar
Ecrire un caractère TString::SetChar
Obtenir sa longueur TString::GetLen
Afficher la chaîne TString::Afficher
Recopier TString::Copier
Concaténer TString::Append
private:
taille de la chaîne int length
contenu de la chaîne char *string
Notes
ALLOCATION 30
Opérateur d’assignation
s2.length = s1.length;
s2.string = s1.string; // ????
Notes
ALLOCATION 31
Surcharge de l’opérateur d’assignation
s1 =s2;
s1.operator = (s2); //moins lisible
class TString{
public:
...
void operator = (const TString& src);
...
};
Notes
ALLOCATION 32
Le pointeur THIS
Encore un problème sur TString
TString s1;
...
s1 = s1; // self assignation
Le pointeur THIS
• Pointeur spécial accessible aux fonctions membres.
• Pointe sur l’instance pour laquelle la méthode est appelée.
• Pas de pointeur « this » pour les méthode « static » (voir plus tard).
void TDate::Afficher(){
cout << mois;
cout << this->mois;
cout << (*this).mois;
}
Notes
ALLOCATION 33
return *this
a = b = c;
cout<< a << b << c ;
Attention
this est un pointeur constant qui ne peut pas être modifié
(this est supporté différement suivant les versions C++)
length = src.length; //
delete [] string; //
//
string = new char[length +1]; //
::strncpy(string,src.string,length+1); //
string[length]=‘\0’; //
return *this;
}
Notes
ALLOCATION 34
Exemple
Réaliser une classe TEnsemble d’entiers
Notes
ALLOCATION 35
Assignation et initialisation
Assignation
Changer la valeur d’un objet existant
int i;
TString s1,s2;
...
i=3;
s1 = s2; // invoque operator=()
Initialisation
int i;
TString s1(″ chien″ ); //invoque un
constructeur
TString s2(s1); //invoque copy constructor
Notes
ALLOCATION 36
Copy constructor
Déclaration
Un constructeur prend comme argument une instance de même type.
TString s2 = s1;
TString s2(s1);
Par défaut l’initialisation effectue une copie membre à membre. Les mêmes
problèmes que lors de la copie d’une chaîne
class TString {
public:
TString(const TString& src);
...
}
Utilisation
Lors de la déclaration
Lorsqu’une fonction ou une méthode reçoit un objet comme paramètre
Lorsqu’une fonction ou méthode retourne un objet.
Notes
ALLOCATION 37
Objet comme argument
Notes
ALLOCATION 38
Passer et retourner des références
Eviter la surcharge occasionnée par l’appel du copy constructor
Passer des références pour éviter la création d’objet temporaire
La fonction ou l’instance utilise les mêmes instances que l’appelant
Attention:
Ne pas retourner de référence sur une variable locale
Notes
ALLOCATION 39
NOTIONS
AVANCÉES
Initialisation
Les propriétés statiques ne sont pas initialisées par le constructeur.
Initialisées comme des variables globales
Notes
class TCompte
{
public :
static SetTaux(float ntx){
Taux=ntx ;
}
private :
static float Taux ;
}
void main()
{
TCompte : :SetTaux(10.6) ;
}
Notes
Notes
Déclaration
Initialisation possible :
appel explicite de constructeur
TDate Anniversaire[10]= {
TDate(17,7,77),
TDate(27,7,82) } ;
Allocation dynamique
TString * text ;
Notes
Général
A la création, appel de new puis du constructeur.
class TAppli{
public :
void * operator new (size_t taille) ;
void operator delete(void *ptr) ;
. . .
} ;
Notes
#include <iostrem.h>
#include <stdlib.h>
#include <new.h>
void main()
{
_set_new_handler(Finish) ;
while(. . .){
//allocation avec new…
}
}
Notes
Utilisation de unions
Notes
HERITAGE 46
Les classes dérivées en C++
Une classe de base « TEmploye »: caractéristique communes.
class TEmploye
{
public :
TEmploye(const char*n) ;
char *GetNom() ;
private :
char *nom ;
} ;
Notes
HERITAGE 47
Classe dérivées
Notes
HERITAGE 48
Les membres protected
Définir des membres privés accessibles aux méthodes de la classes dérivées.
(A utiliser avec soin, perte du bénéfice de l’encapsulation)
class TBase {
public :
int PasSecret ;
protected :
int SecretDeFamille ;
private :
int SecretPerso ;
} ; //------------------------------
class TDerive : public TBase{
public :
int Acces() ;
} ;//------------------------------
int TDerive ::Acces(){
PasSecret = 3; //-- OK
SecretDeFamille = 2; //-- OK
✭ SecretPerso = 1; //-- erreur
}//------------------------------
void main(){
TBase pere ; TDerive fils ;
pere.PasSecret = 3; //-- OK
pere.SecretDeFamille = 2; //- erreur
pere.SecretPerso = 1; //- erreur
fils.PasSecret = 3; //-- OK
fils.SecretDeFamille = 2; //- erreur
fils.SecretPerso = 1; //- erreur
}
Notes
HERITAGE 49
Redéfinir une méthode de la classe de base
float TSalarie::CalculPaie()const
{
return heure * salaire ;
}
Notes
HERITAGE 50
Constructeur de classe dérivée
TSalarie::TSalarie(const char*n):TEmploye(n)
{
heure=0. ;
salaire=0. ;
}
Conversion de classe
TEmploye * ptrEmp ;
TCommercial * ptrCom ;
ptrEmp = &vendeur ;
ptrEmp->SetVente() ; //probl :car ptr TEmploye
ptrEmp->GetNom() ; // OK !
Notes
HERITAGE 51
Exemple
public
private
protected
Notes
HERITAGE 52
LES PATRONS DE
FONCTIONS ET DE
CLASSES
Le typage fort
C++ contrôle le type des arguments des fonctions.
Pb : max(int,int) , max(float,float) …
Fonctions génériques
Un patron ou un modèle de base pour toute une fammile de fonctions surchargées.
Une notation compacte avec contrôle des types.
main(){
min(10,50); //min(int,int)
min(20.5,56.3); //min(double,double)
return 0;
}
Notes
TEMPLATE 53
L'instanciation
La fonction « template » décrit un modèle de construction des fonctions.
Instanciation à l’appel par l’examen des paramètres d’appel.
La surcharge
Une fonction « template » peut être surchargée (signatures différentes)
template <class T> // une classe générique
class TClasse{ … }
template<class T>
T Somme(TClasse<T>, int) ;
template<class T>
T Somme( T *, int) ;
template<class T>
T Somme( T , T ) ;
Spécialisation
Pour un type particulier spécialiser la fonction générique.
Notes
TEMPLATE 54
Les classes génériques
Déclaration
Modèle ou classe dite générique pour d’autres classes.
template<class T>
class TList{
public :
TList(int n) ;
T& opérator[](int i) {
return liste[i] ;
}
private :
T* list ;
int size ;
}//------------------------
Notes
TEMPLATE 55
Implémenter une queue
Les Classes
Remarques :
Envisager TQueue « friend » de TQueueItem
Notes
TEMPLATE 56
Classe « template »
Spécialisation
TQueueItem<char*> ::TQueueItem(char*str){ . . . }
Membres statiques
Une classe template peut déclarer des propriété statique
Chaque instanciation d’un type possède une série de propriétés communes.
TGraphics ::inst ;
x = TXyz ::UneMethode() ;
Types imbriqués
La classe TQueueItem implémentée comme une classe amie.
Possible de déclarer TQueueItem comme classe imbriquée.
Attention au « template »
template<class T>
class TQueue{
. . .
private :
class TQueueItem{
public :
TQueueItem(T val) :item(val),next(0){};
T item ;
TQueueItem *next ;
} ;
TQueueItem *debut, *fin ;
. . .
}
Notes
TEMPLATE 57
SURCHARGE DES
OPÉRATEURS
Qui ?
Notes
= *= /= += -= << >>
Notes
c=a+b; c = operator+( a, b ) ;
Notes
operator=()
const TString& operator=(const TString&) ;
const TString& operator=(const char*) ;
const TString& operator=(const char) ;
operator+()
friend TString operator+(const TString&,const
char*) ;
friend TString operator+(const TString &, char) ;
friend TString operator+(char, const TString &) ;
friend TString operator+(const char*,const TString
&);
friend TString operator+(const TString&,const
TString&);
operator+=()
void operator+=(const TString&) ;
void operator+=(const char*) ;
void operator+=(const char) ;
operator==()
BOOL operator==(const TString &,const char*) ;
BOOL operator==(const char*, const TString &) ;
BOOL operator==(const TString&, const TString&);
operator[]()
Exemple
Numérateur / Dénominateur
Redéfinir l’opérateur « + »
Notes
// constructeur à un argument
TFraction a(5) ;
TFraction b(6,7) ;
a=8 ;
Notes
CONVERSION DE CLASSE 63
MÉTHODES
VIRTUELLES
Typage statique
En C++ un pointeur sur un type d’objet peut recevoir l’adresse d’un objet descendant.
TSalarie * parSal ;
ptrSal = new TCommercial(″ Dupont″ ) ;
Typage dynamique
La détermination de la méthode à invoquer est déterminée à l’exécution, par le type de
l’instance adressé par le pointeur.
Notes
MEHODE VIRTUELLE 64
Méthodes virtuelles
class TEmploye
{
public :
virtual float CalculPaie() const ;
} ;//------------------------
float TEmploye::CalculPaie()const;// jamais utilisée
{ . . .}
TEmploye *ptr ;
ptr = &UnSalarieQ ;
. . .
ptr->CalculPaie() ; // TSalarie::CalculPaie
ptr = &UnCommercialQ ;
. . .
ptr->CalculPaie() ; // TCommercial::CalculPaie
Notes
MEHODE VIRTUELLE 65
Polymorphisme
Appel des méthodes membres sans spécifier le type de l’instance.
Une même méthode possède un comportement différent suivant l’instance.
class TEmploye
{
public :
virtual float CalculPaie()const=0 ;
. . .
}
Notes
MEHODE VIRTUELLE 66
HERITAGE
MULTIPLE
Construction
Une classe est dérivée de plusieurs classes de base.
Constructeur de «TUrsidé».
TUrsidé::TUrsidé(…):TMammifere(…), TCarnivore(…),
TPlantigrade{ … };
HERITAGE MULTI¨PLE 67
Le conflit d’héritage
class TDirecteurVente :
public TVendeur, public TDirecteur{...};
class TDirecteurVente :
public TVendeur, public TDirecteur{...};
Une classe de base virtuelle est initialisée par sa classe la plus dérivée.
TDirecteurVente:TDirecteurVente(…):TEmploye(…),
TVendeur(…), TDirecteur(…)
{...};
Notes
HERITAGE MULTI¨PLE 68
HERITAGE OU
COMPOSITION
Composition : A possède-un B
Héritage : B est-un A
Exemple :
Remarques
Composition :
pour dissimuler une implémentation
pour éviter certains héritage multiples
Notes
HERITAGE/COMPOSITION 69
Hiérarchie des classes
Abstraction
Généralisation : classe de base
Spécialisation : classe dérivée
Hériter du code
Ecrire une nouvelle classe et réutiliser du code existant.
Assure le polymorphisme.
Notes
HERITAGE/COMPOSITION 70
LES EXCEPTIONS
Les rubriques
• Lancement d’une exception.
• Gestion d’une exception.
• Spécification d’une exceptions.
• Constructeur et destructeur dans la gestion d’exceptions.
• Exceptions non gérées.
• Paramétrage des options de gestion des exceptions.
Notes
MEHODE VIRTUELLE 71
Définition
Une exception est une situation anormale qui se produit lors de l’exécution
d’un programme.
Bloc à surveiller
...
try {
traitement(. . .);
...
} // fin du bloc à surveiller
Gestionnaire
Le gestionnaire, qui est spécifié par « catch », doit suivre immédiatement le
bloc à surveiller.
...
try {...} // fin du bloc à surveiller
catch(TExept_1 expVide){
//fournit un gestionnaire de type: TExept_1
... // effectuer des actions
}
catch(...){/*interception toute except, quel que
soit son type, (non intercepte précédemment)*/
...
}
Notes
MEHODE VIRTUELLE 72
Lancement d’une exception
L’exception interrompt le déroulement du programme, et teste l’existance d’un
gestionnaire approprié. Si aucun gestionnaire n’est trouvé le programme est
interrompu.
exemple 1:
throw TObjet_Except; //indique que:
//TObjet_Except doit être passée à un gestionnaire
exemple 2:
throw ;//indique que:
//l’exception en train d’être traitée doit être relancée.
//(l’exception doit réellement exister
exemple 3:
void MaFonction() throw (TA,TB){//indique:
//la liste d’exception que MaFonction peut lancer.
exemple 4:
void MaFonction() throw (){
//indique que: MaFonction ne lance aucune
exception.
Notes
MEHODE VIRTUELLE 73
template <class T>
class TTablo10Elem{
public:
...
T& operator [](int indice){
if (indice>=10 || indice<0)
throw TErreurIndice();
}
class TErreurIndice(){
TErreurIndice();
}
private:
T tab[10];
};
Une exception transporte de l’information depuis le point où elle est lancée jusqu’au
point où elle est interceptée.
Lancement:
• Le programme recherche le gestionnaire approprié.
• Si le gestionnaire est trouvé, la pile est déroulée à ce point..
• Le contrôle du programme est remis au gestionnaire.
Notes
MEHODE VIRTUELLE 74
COMPLÉMENT
Complément « template »
Compilation de modèle de fichier séparé
commutateur:
« -Jgx » générant des références externes aux modèles.
« -Jg » revient à l’état initial du commutateur modèle.
« -Jgd » générant des références publiques .
//vecteur.h
template <class T, int taille> class TVector{
public:
...
private:
T tab[taille];
};// fin du fichier vecteur.h
//vecteur.cpp
#include ″ vecteur.h″
template<class T,int taille> TVector::TVector(){}
...
// générez les instances nécessaires.
#pragma option -Jgd
typedef TVector<int, 100> ;
typedef TVector<char,20> ;
//fin fichier vecteur.cpp
LANGAGE C++ 75
// fichier source main.cpp
#include ″ vecteur.h″
#pragma option -Jgx
main(){
TVector<int, 100> int_100;
TVector<char, 20> char_20;
...
abord
Si vous appelez « abort » n'importe où dans un programme, aucun destructeur n'est
appelé, pas même pour les variables globales.
Notes
LANGAGE C++ 76
Exceptions
Support de la gestion des exceptions
Les exceptions C++ peuvent être interceptées par référence, par pointeur ou par valeur.
Les exceptions déclenchées par le constructeur:
• Les destructeurs de la classe de base sont appelés uniquement pour les
instances construites entièrement.
terminate
« terminate » est lancée quant une exception est soulevée et que le programmeur n’a
pas prévu de géré. La forme par défaut définie pour « terminate » est un appel à
« abord » qui provoque l’arrêt brutal.
unexpected
« unexpected »(inattendu) l’execution d’une fonction génère une exception qui ne fait
pas partie de la liste des exceptions qu’elle est susceptible de générer. Puis, à son tour
elle appellera « ternimate »
set_teminate
La fonction « void (*)(void)set_terminate(void (*ptr_sur_fonct)(void)) » permet de
remplacer l’appel à la fonction « abord » par un appel à une fonction définie par le
programmeur. La fonction « set_terminate » renvoie comme valeur de retour un
pointeur sur la fonction initialement associée.
Attention : la fonction appelée par « terminate » doit obligatoirement terminer le
programme (par « abord » ou « exit »).
set_unexpected
La fonction « void (*)(void)set_unexpected(void (*ptr_sur_fonct)(void)) » permet de
remplacer la fonction « unexpected ».La fonction ddéfinie par le programmeur en
remplacement ne doit pas rendre la main, mais elle peut générer de nouvelles
exceptions qui seront gérées selon le principe habituel.
En cas de redéfinition de « unexpected », la fonction « terminate » ne sera plus
appelée.
Notes
LANGAGE C++ 77
Exceptions du système d’exploitation
Ces exceptions incluent :
• Violations d’accès.
• Erreurs arithmétiques (de nombres entiers, floattants).
• Débordements de pile.
• Interruption « Ctrl+C ».
ces exceptions sont gérées dans la RTL et converties en instances. Les exceptions du
système d’exploitation ne peuvent être interceptées que par pointeur ou par référence.
=> Par référence est la meilleure approche.
xalloc(string&,size_t):xmsg;//erreur:new
Bad_typeid //erreur:typeid
Bad_cast //erreur: dynamic_cast
Notes
LANGAGE C++ 78
PROPRIÉTÉS ET
IDENTIFICATEUR
Attributs
« stored » détermine si cette propriété doit être enregistrée dans le fichier de fiche
correspondant (.DFM)
« default »
« nodefault »: utilisé par des propriétés pour outrepasser une précédente déclaration
« default=valeur »
« write »
« read »: spécifier lecture ou écriture d’une donnée membre d’une classe.
« __automated »
« __dispid »
Notes
LANGAGE C++ 79
Exemple
Voici une classe qui déclare trois propriétés utilisant un spécificateur d'index qui
permet à ces trois propriétés d'avoir les mêmes méthodes d'accès read et write :
};
Notes
LANGAGE C++ 80
Comme chaque élément de la date (jour, mois, année) est un entier et comme définir
chaque élément demande d'encoder la date, le code évite la duplication en partageant
les méthodes read et write des trois propriétés. Vous n'avez besoin que d'une seule
méthode pour lire un élément de date et d'une seule pour l'écrire.
Voici la méthode read qui extrait un élément de date :
int __fastcall
TSampleCalendar::GetDateElement(int Index){
unsigned short AYear, AMonth, ADay;
int result;
FDate.DecodeDate(&AYear, &AMonth, &Aday);
// décompose la date en éléments
switch (Index){
case 1: result = AYear; break;
case 2: result = AMonth; break;
case 3: result = ADay; break;
default: result = -1;
}
return result;
}//-------------------------------------------------
-
Notes
LANGAGE C++ 81
Voici la méthode write qui définit un élément de date :
Notes
LANGAGE C++ 82
Introduction.................................................................................................................................2
Historique................................................................................................................................2
Les enjeux...............................................................................................................................2
Exemple......................................................................................................................................3
HELLO WORLD....................................................................................................................3
Langage C...........................................................................................................................3
Langage C++.......................................................................................................................3
Iostream.h............................................................................................................................3
Extensions C++...........................................................................................................................4
Quelques nouveautés...............................................................................................................4
Les commentaires...............................................................................................................4
La déclaration des fonctions...............................................................................................4
Le C++ attend un prototype pour chaque fonction.....................................................4
Les arguments par défaut....................................................................................................4
Les entrées , sorties.............................................................................................................5
Surdéfinition des opérateurs >> et << pour s’adapter au format................................5
Entrées.............................................................................................................................5
Caractère :...................................................................................................................5
Chaîne :.......................................................................................................................5
Les déclarations de variables..................................................................................................7
La portée des variables........................................................................................................7
Les fonctions « inline ».......................................................................................................8
l’identifiant « const »..........................................................................................................9
Pointeur sur une constante..............................................................................................9
Pointeur constant.............................................................................................................9
Argument constant..........................................................................................................9
Fonction constante..........................................................................................................9
Retourne un pointeur sur une constante..........................................................................9
Pointeur constant sur une constante................................................................................9
Les fonctions surchargées.....................................................................................................10
L’évasion vers le C...............................................................................................................10
Les références.......................................................................................................................11
Références et paramètres de fonction...................................................................................12
Exercices (01).......................................................................................................................13
Programme de permutation de données « swap(a,b) ».....................................................13
Utilisation du debugger.....................................................................................................13
Les classes.................................................................................................................................14
Plan........................................................................................................................................14
Propriétés et méthodes..............................................................................................14
introduction aux classes............................................................................................................15
Déclaration d’une classe.......................................................................................................15
La structuration des données en C....................................................................................15
Les classes C++.................................................................................................................15
Déclaration de la classe.....................................................................................................16
Définition des méthodes....................................................................................................16
...............................................................................................................................................16
Implementation de la classe..................................................................................................17
Visibilité des membres..........................................................................................................18
Public:...............................................................................................................................18
Private:..............................................................................................................................18
Protected:..........................................................................................................................18
Les propriétés........................................................................................................................19
Accès par des méthodes membres ...................................................................................19
Limiter les propriétés publiques........................................................................................19
Exemple de classe.................................................................................................................20
Accès aux propriétés.........................................................................................................20
Mise en œuvre...................................................................................................................20
Les méthodes.........................................................................................................................21
Rôle...................................................................................................................................21
Exemple........................................................................................................................21
Le constructeur..................................................................................................................22
Le destructeur....................................................................................................................22
Objets constants................................................................................................................23
Déclarer, initialiser un objet et empêcher les modifications.....................................23
Dès que possible, déclarer les fonction « const ».....................................................23
Exemple de classe.................................................................................................................24
Les objets membres d’une classe..........................................................................................25
Déclaration........................................................................................................................25
Constructeur......................................................................................................................25
Attention à l’initialisation d’un objet membre..........................................................25
Initialisation de propriété constante..................................................................................26
Exemple de mise en oeuvre..........................................................................................26
Classes et allocation..................................................................................................................27
MALLOC et FREE...............................................................................................................27
Operateur NEW.................................................................................................................27
Allocation en C.............................................................................................................27
En C++..........................................................................................................................27
Operateur new...................................................................................................................28
Operateur DELETE...........................................................................................................28
NEW et DELETE..................................................................................................................29
Pour des types simples......................................................................................................29
Pour des tableaux dynamiques..........................................................................................29
Pour des tableaux multi dimensionnel..............................................................................29
Tableau de pointeurs sur fonctions...................................................................................29
Classe avec pointeurs membres............................................................................................30
Réalisation d’une classe « TString ».................................................................30
Destructeur............................................................................................................30
Opérateur d’assignation....................................................................................................31
Problème avec la classe TString...................................................................................31
Lors de l’assignation d’instance le compilateur : membre à membre...................31
Surcharge de l’opérateur d’assignation.............................................................................32
Le pointeur THIS..................................................................................................................33
Encore un problème sur TString.......................................................................................33
Le pointeur THIS..............................................................................................................33
A l’appel d’une méthode membre le compilateur renseigne « this »....................33
return *this....................................................................................................................34
Ces opérateurs doivent retourner l’objet désigné..................................................34
Exemple............................................................................................................................35
Réaliser une classe TEnsemble d’entiers..........................................................35
Conserver dans un tableau dynamique les éléments.............................................35
Assignation et initialisation...................................................................................................36
Assignation........................................................................................................................36
Changer la valeur d’un objet existant ..................................................................36
Initialisation......................................................................................................................36
Définir la valeur lors de la déclaration de l’instance............................................36
Copy constructor...................................................................................................................37
Déclaration........................................................................................................................37
Utilisation..........................................................................................................................37
Objet comme argument.................................................................................................38
Objet comme retour......................................................................................................38
Passer et retourner des références.....................................................................................39
Passer une référence......................................................................................................39
Retourner une référence................................................................................................39
Notions avancées.......................................................................................................................40
Les propriétés statiques.........................................................................................................40
Déclaration........................................................................................................................40
Initialisation......................................................................................................................40
Les méthodes statiques..........................................................................................................41
Les FRIENDS.......................................................................................................................42
Les classes amies..............................................................................................................42
Les fonctions « friend »....................................................................................................42
Les tableaux d’instances.......................................................................................................43
Déclaration........................................................................................................................43
Allocation dynamique.......................................................................................................43
Surcharge de NEW et DELETE............................................................................................44
Général..............................................................................................................................44
Spécifiques à une classe....................................................................................................44
_set_new_handler (new.h)...................................................................................................45
Dérivation et heritage................................................................................................................46
La structuration des données en C........................................................................................46
Les classes dérivées en C++..................................................................................................47
Classe dérivées..................................................................................................................48
Les membres protected.....................................................................................................49
Redéfinir une méthode de la classe de base......................................................................50
Constructeur de classe dérivée..........................................................................................51
Conversion de classe.........................................................................................................51
Exemple............................................................................................................................52
Les patrons de fonctions et de classes ......................................................................................53
Le typage fort........................................................................................................................53
Fonctions génériques.............................................................................................................53
L'instanciation...................................................................................................................54
La surcharge......................................................................................................................54
Spécialisation....................................................................................................................54
Les classes génériques..........................................................................................................55
Déclaration........................................................................................................................55
Implémenter une queue.........................................................................................................56
Les Classes........................................................................................................................56
Les méthodes de TQueue..................................................................................................56
Classe « template »...............................................................................................................57
Spécialisation....................................................................................................................57
Membres statiques.............................................................................................................57
Types imbriqués................................................................................................................57
Surcharge des opérateurs..........................................................................................................58
Qui ?......................................................................................................................................58
Les opérateurs pouvant être surchargés................................................................................59
Règles................................................................................................................................59
Les opérateurs non surchargeable.....................................................................................59
Mise en œuvre par « operator »........................................................................................59
Surcharge par une fonction AMIE........................................................................................60
Surcharge par une méthode membre.....................................................................................60
Exemple class « TString »................................................................................................61
operator=()....................................................................................................................61
operator+()....................................................................................................................61
operator+=()..................................................................................................................61
operator==()..................................................................................................................61
operator[]()....................................................................................................................61
Remarques.........................................................................................................................62
Exemple............................................................................................................................62
Conversion de classe.................................................................................................................63
Conversion par constructeur.................................................................................................63
Conversion par operateur......................................................................................................63
Méthodes virtuelles...................................................................................................................64
Typage statique.....................................................................................................................64
Typage dynamique................................................................................................................64
Méthodes virtuelles...............................................................................................................65
Polymorphisme.....................................................................................................................66
Edition de lien dynamique................................................................................................66
Méthode virtuelle pure......................................................................................................66
Les destructeurs virtual.....................................................................................................66
Heritage multiple.......................................................................................................................67
Construction..........................................................................................................................67
Le conflit d’héritage..............................................................................................................68
Les classes abstraites.............................................................................................................68
Heritage ou composition...........................................................................................................69
Exemple :..............................................................................................................................69
Remarques.............................................................................................................................69
Hiérarchie des classes ..........................................................................................................70
Abstraction........................................................................................................................70
Hériter du code..................................................................................................................70
Hériter des interfaces........................................................................................................70
Les exceptions...........................................................................................................................71
Les rubriques.........................................................................................................................71
Définition..............................................................................................................................72
Gestion des exceptions en C++.............................................................................................72
Bloc à surveiller................................................................................................................72
Gestionnaire......................................................................................................................72
Lancement d’une exception..............................................................................................73
exemple 1:.....................................................................................................................73
exemple 2:.....................................................................................................................73
exemple 3:.....................................................................................................................73
exemple 4:.....................................................................................................................73
Complément..............................................................................................................................75
Complément « template ».....................................................................................................75
Compilation de modèle de fichier séparé..........................................................................75
Complément « exit » et « abord ».........................................................................................76
exit.....................................................................................................................................76
abord..................................................................................................................................76
Exceptions.............................................................................................................................77
Support de la gestion des exceptions................................................................................77
terminate........................................................................................................................77
unexpected....................................................................................................................77
set_teminate..................................................................................................................77
set_unexpected..............................................................................................................77
Exceptions du système d’exploitation...............................................................................78
Les exceptions standard................................................................................................78
Propriétés et identificateur........................................................................................................79
Propriétés associer à un identificateur..................................................................................79
Attributs............................................................................................................................79
Exemple............................................................................................................................80