Telechargé par Abdo Aboulqasim

POOFIng15-16-1

publicité
INITIATION A LAPROGRAMMATION
ORIENTEE OBJET ET A C++
1
Départ de Génie Electrique Faculté des
Sciences et Téchniques de BENI
MELLAL
Départ de Génie Electrique Faculté des Sciences et
Téchniques de BENI MELLAL
Sommaire







2
Introduction
Approche orientée objet
Création et lancement d’un projet
La syntaxe du C
Les classes
Syntaxe C++
Application
Départ de Génie Electrique Faculté des Sciences et
Téchniques de BENI MELLAL
Introduction
3

Langages linéaires
Les lignes du programme sont exécutées d’une manière
séquentielle. Par exemple le fortran et l’assembleur.

Langages modulaires
Regroupement d’un ensemble d’instructions dans des fonctions
ou procédures. Le langage c fait partie de ces langages.

Langages orientés objets
La méthode orientée objet est en fait une évolution de l’approche
modulaire .
A. ABOUNADA Départ de Génie Electrique Faculté des
Sciences et Téchniques de BENI MELLAL
Approche orientée objet
D’un point de vue général la construction d’un
système informatique se résume par la formule:
Algorithmes + Structures de données = Programme
Le concepteur d’un système informatique a donc deux
grandes options pour l’architecture d’un
programme:
4
Départ de Génie Electrique Faculté des Sciences et
Téchniques de BENI MELLAL
10 mars 2008

Les méthodes de conception par traitements:
Ces méthodes constituent l’approche traditionnelle,
la base de la réflexion est effectuée sur les
traitements, le concepteur considère ainsi les tâches
que doit accomplir le programme.
Remarque:
–
5
Les modules utilisés sont souvent adaptés au type de
problèmes posés au départ et ne permettant que peu
d’extensibilité du système obtenu et que peu de
réutilisabilité.
Départ de Génie Electrique Faculté des Sciences et
Téchniques de BENI MELLAL
10 mars 2008

6
Les méthodes de conception par objet:
la conception par objet trouve ses fondements
dans une réflexion menée autour de la vie et
la qualité du logiciel. Ceci peut être atteint à
travers certains critères:
–
La correction ou la validité.
–
L’extensibilité.
–
La réutilisabilité.
–
La robustesse
Départ de Génie Electrique Faculté des Sciences et
Téchniques de BENI MELLAL
10 mars 2008
La conception orientée objet est basée principalement
sur trois aspects primordiaux:
7

L’encapsulation: cette technique permet de réunir des
variables et des fonctions (méthodes) au sein d’une
même entité nommée classe. l’accès aux données et
fonctions peut être réglementé.

L’héritage: cette technique permet de définir une
hiérarchie de classe. Chaque classe fille hérite des
méthodes et des données de ses mères.

Le polymorphisme: cette caractéristique offre la
possibilité de définir plusieurs fonctions de même
nom mais possédant des paramètres différents.
Départ de Génie Electrique Faculté des Sciences et
Téchniques de BENI MELLAL
Création et lancement d’un projet
Un environnement de développement intégré (EDI) 1, est
un logiciel regroupant un ensemble d'outils nécessaires
au développement logiciel dans un (ou plusieurs)
langage(s) de programmation.
Outils inclus au minimum dans un EDI :
un éditeur de texte spécialisé (avec coloration syntaxique,
indentation automatique, complétion automatique, . . . ),
un compilateur.
un débogueur.
8
des outils d'automatisation de la compilation et de gestion de projets.
Départ de Génie Electrique Faculté des Sciences et
Téchniques de BENI MELLAL
Visuel C++ fonctionne suivant les notions de "Projet" et
"Espace de travail", comme désormais la plupart des
environnements de programmation intégrés (MPLAB,
CodeComposer ...)
Un projet contient des informations plus techniques
relatives à la programmation. C'est dans ce fichier que
seront stockés les noms des fichiers présents, les
librairies utiles, etc.
9
Départ de Génie Electrique Faculté des Sciences et
Téchniques de BENI MELLAL
10 mars 2008
Étapes pour la création d’un projet sous Visuel
c++:
un projet fera partie automatiquement d'un espace de
travail par défaut.
Pour le créer on choisi le menu "File" puis "Nouveau".
Vous arrivez alors devant la boîte de dialogue
suivante:
10
10 mars 2008
11
Départ de Génie Electrique Faculté des Sciences et
Téchniques de BENI MELLAL
Départ de Génie Electrique Faculté des Sciences et
Téchniques de BENI MELLAL
Vous pouvez remarquer la présence de quatre onglets
différents : Files, Projects, Workspaces et Other
Documents.
pour l'instant nous allons juste créer un projet pour la
compilation de code C++. Pour cela, choisissez l'onglet
"Projects" . puis cliquez sur le 10ème choix de la liste :
"Win32 Console Application".
Visual C++ permet en effet d'effectuer de nombreux
types de programmes différents, comme par exemple:
 des librairies,
 des applications Windows classiques
 des programmes qui s'exécutent en mode "Dos"
(fenêtre Dos).
12
Départ de Génie Electrique Faculté des Sciences et
Téchniques de BENI MELLAL
Vous pouvez alors entrer un nom pour votre projet
dans la boîte d'édition "Project Name" et la
localisation physique de votre projet sur le
disque dur, dans "Location".
Vous pouvez alors appuyer sur "Ok". Visual C++
se charge alors de créer pour vous tout
l'environnement de base, nécessaire à la
réalisation de votre programme.
Bien sûr, dans notre cas "d'application console",
il ne vous crée aucun fichier de code : c'est à
vous de jouer !
13
Départ de Génie Electrique Faculté des Sciences et
Téchniques de BENI MELLAL
14
Départ de Génie Electrique Faculté des Sciences et
Téchniques de BENI MELLAL
Compilation et exécution:
Votre projet est créé, il ne vous reste "plus" qu'à l'étoffer
avec quelques lignes de code... Pour cela, nous allons
commencer par un programme très simple en langage
C.
Tout d'abord, créons un nouveau fichier. Pour cela, vous
devez appuyer sur le bouton "New" de la barre d'outils
(image de gauche).
Vous vous retrouvez alors avec une nouvelle fenêtre
ouverte vide sans titre.
Faites un "Save" ou "Save As" du menu "Files" ou bien
cliquez sur le bouton correspondant. Pour notre
exemple, appelons le "main.c".
15
Départ de Génie Electrique Faculté des Sciences et
Téchniques de BENI MELLAL
Deux compilations différentes :
 compilez le fichier courant seul (« Ctrl+F7").
 compilez le projet dans sa globalité ("F7"). C'est la
deuxième qui permet la génération d'un exécutable.
Il est également toujours possible d'accéder à ces
actions, par l'intermédiaire du menu "Build" de
l'interface, ou encore par le bouton correspondant.
L’exécution se fait en sélectionnant "Execute
MyProject.exe" (Ctrl+F5).
Une fenêtre Dos s'affiche alors : elle contient les
sorties du programme que vous venez d’écrire.
16
Départ de Génie Electrique Faculté des Sciences et
Téchniques de BENI MELLAL
Exemple:
#include <stdio.h>
void main()
{
int i;
printf( "Debut boucle\n" );
for( i=0; i<20; i++ )
{
printf( "*" );
}
printf( "\nFin boucle\n" );
}
17
Départ de Génie Electrique Faculté des Sciences et
Téchniques de BENI MELLAL
Le debugger :
Il est possible de "tracer" un programme. Cela
consiste à l'exécuter ligne par ligne, expression
après expression. Pour ce faire, il y a plusieurs
solutions.
 La première fonctionne suivant la technique des
"Breakpoints" : on place un point d'arrêt
quelque part dans le code (Ctrl+B, cf. Figure 6),
à une ligne donnée (en fait, la ligne courante du
curseur de texte).
18
10 mars 2008
19
Départ de Génie Electrique Faculté des Sciences et
Téchniques de BENI MELLAL
On lance alors l'exécution en mode Debug F5),
et le programme s'arrête automatiquement à
l'endroit voulu. Il est alors possible de tracer le
programme ligne par ligne (F10 ou F11), ou
bien de le relancer jusqu'à la fin ou le prochain
point d'arrêt.
Départ de Génie Electrique Faculté des Sciences et
Téchniques de BENI MELLAL
10 mars 2008
La seconde solution consiste à ne pas mettre
de breakpoint, mais à exécuter un
programme jusqu'à une ligne donnée. Cette
possibilité est offerte par Visual grâce à « run
to Cursor" (Ctrl+F10)
Il est plus intéressant de suivre l'état des
variables du programme.
Pour cela, vous pouvez vous servir de la barre
qui s'affiche en bas de l'interface de Visual
en mode debuggage
20
10 mars 2008
Départ de Génie Electrique Faculté des Sciences et
Téchniques de BENI MELLAL
il suffit d'effectuer un glisser-déposer des
variables à visualiser
21
Départ de Génie Electrique Faculté des Sciences et
Téchniques de BENI MELLAL
10 mars 2008
Vous pouvez également avoir accès au contenu
d'une variable en cliquant sur elle à l'aide du
bouton droit de la souris, puis "Quickwatch".
22
Départ de Génie Electrique Faculté des Sciences et
Téchniques de BENI MELLAL
Le langage C

23
Considérons le programme ci-dessous :
Départ de Génie Electrique Faculté des Sciences et
Téchniques de BENI MELLAL
#include <stdio.h>
void affiche_calcul(float,float); /* prototype */
float produit(float,float);
Int varglob;
int main(void) {
float a,b; /* déclaration locale */
varglob=0;
puts ("veuillez entrer 2 valeurs");
scanf("%f %f",&a,&b);
affiche_calcul (a,b);
printf("nombre d'appels à produit : %d\n",varglob);
}
float produit (float r, float s) { varglob++; return(r*s); }
void affiche_calcul (float x,float y)
{
float varloc;
varloc=produit(x,y);
varloc=produit(varloc,varloc);
printf("le carré du produit est %f\n",varloc);
}
24
Départ de Génie Electrique Faculté des Sciences et
Téchniques de BENI MELLAL
Syntaxe du C
Un programme C est composé:
 de directivess du pré-processeur, commençant
par #, terminées par un retour à la ligne (pas
de ;). Dans l'exemple il y en a une.
 de déclarations globales (terminées par un ;).
Ici on en a trois, deux prototypes et une
variable globale.
 d'une suite de fonctions, écrites les unes après
les autres (sans imbrication comme on le ferait
en Pascal). Ici il y en a 3 : main, produit et
affiche_calcul.
25
Départ de Génie Electrique Faculté des Sciences et
Téchniques de BENI MELLAL
Les commentaires
Syntaxe :
Les commentaires débutent par /* et se terminent par */.
Ou par // dans le cas d’une seule ligne
Exemple :
/* Ceci est un commentaire */
// Ceci est un commentaire
27
Départ de Génie Electrique Faculté des Sciences et
Téchniques de BENI MELLAL
Les types de base
Les
caractères
Les entiers
Les flottants
28
Départ de Génie Electrique Faculté des Sciences et
Téchniques de BENI MELLAL
10 mars 2008

Les caractères
Le mot-clé désignant les caractères est
char. Un objet de ce type doit pouvoir
contenir le code de n'importe quel caractère
de l'ensemble des caractères utilisé sur la
machine.
29
Départ de Génie Electrique Faculté des Sciences et
Téchniques de BENI MELLAL
10 mars 2008

Les entiers
Le mot clé désignant les entiers est int. Les
entiers peuvent être affectés de deux types
d'attributs : un attribut de précision et un attribut de
représentation
attribut de précision : short et long. on peut avoir trois types
d'entiers : short int, int et long int
attribut de représentation : unsigned. on peut avoir deux types
d'entiers : int et unsigned int
six types d'entiers : int, short int, long int (tous trois signés) et
unsigned int, unsigned short int et unsigned long int.
30
Départ de Génie Electrique Faculté des Sciences et
Téchniques de BENI MELLAL
10 mars 2008

Les flottants
Il existe trois types de flottants correspondants à
trois précisions possibles. En allant de la précision la
plus faible vers la plus forte, on dispose des types
float, double et long double.
31
Départ de Génie Electrique Faculté des Sciences et
Téchniques de BENI MELLAL
10 mars 2008
32
type
taille (en bits)
char
8
-128 à +127
unsigned char
8
0 à 255
short (short int)
16
-32768 à 32767
unsigned short
16
0 à 65535
long (long int)
32
-2.147.483.648 à 2.147.483.647
unsigned long
32
0 à 4.294.967.295
float
32
-3.4e38 à 3.4e38 (7 chiffres significatifs)
double (long float)
64
-1.7e308 à 1.7e308 (15 chiffres
significatifs)
long double (non
standard)
80 ou 128
plage de valeurs
ça dépend
Départ de Génie Electrique Faculté des Sciences et
Téchniques de BENI MELLAL
Les constantes




33
Les constantes entières
Les constantes caractères
Les constantes flottantes
Les chaînes de caractères
littérales
Départ de Génie Electrique Faculté des Sciences et
Téchniques de BENI MELLAL
10 mars 2008

Les constantes entières
On dispose de 3 notations pour les constantes
entières : décimale, octale et hexadécimale.
–
–
–
Les constantes décimales (ex : 372).
Les constantes octales doivent commencer par un
zéro et ne comporter que des chiffres octaux (ex :
0477).
Les constantes hexadécimales
Elles doivent commencer par 0x ou 0X et être
composées des chiffres de 0 à 9, ainsi que des
lettres de a à f (ex : 0x5a2b, 0X5a2b, 0x5A2B).
Une constante entière peut être suffixée par la lettre u
ou U Elle peut également être suffixée par la lettre l
ou L.
34
Départ de Génie Electrique Faculté des Sciences et
Téchniques de BENI MELLAL
10 mars 2008

Les constantes caractères
Une constante caractère s'écrit entourée du
signe '. par exemple, la constante caractère
correspondant au caractère g s'écrit 'g'.

Les constantes flottantes
La notation utilisée est la notation classique par
mantisse et exposant. La mantisse est composée
d'une partie entière suivie du signe . (point) suivi de
la partie fractionnaire. La partie entière et la partie
fractionnaire sont exprimées en décimal et l'une ou
l'autre peuvent être omises.
35
Départ de Génie Electrique Faculté des Sciences et
Téchniques de BENI MELLAL
10 mars 2008

Les chaînes de caractères littérales
Une chaîne de caractères littérale est une suite
de caractères entourés du signe ".
Exemple : "ceci est une chaîne "
36
Départ de Génie Electrique Faculté des Sciences et
Téchniques de BENI MELLAL
Les constantes nommées
 Les
#define
 Les énumérations
37
Départ de Génie Electrique Faculté des Sciences et
Téchniques de BENI MELLAL
10 mars 2008
• Les #define
Exemple:
#define PI 3.14159
dans la suite du programme on pourra utiliser le nom
PI pour désigner la constante 3.14159.
38
Départ de Génie Electrique Faculté des Sciences et
Téchniques de BENI MELLAL
10 mars 2008

Les énumérations
On peut définir des constantes de la manière suivante :
enum { liste-d'identificateurs }
Exemples :
enum {LUNDI, MARDI, MERCREDI, JEUDI,
VENDREDI, SAMEDI, DIMANCHE}; définit les
identificateurs LUNDI, ... DIMANCHE comme étant
des constantes de type int, et leur donne les valeurs
0, 1, ... 6.
enum {FRANCE = 10, LUXEMBOURG, BELGIQUE,
ESPAGNE = 20, ITALIE = 30}; donnera la valeur 11 à
LUXEMBOURG et 12 à BELGIQUE.
39
Départ de Génie Electrique Faculté des Sciences et
Téchniques de BENI MELLAL
Structures de contrôle
1.
Boucles
Les boucles sont la solution à employer pour
effectuer plusieurs fois la même instruction (ou un
bloc d'instructions).
For (pour)
While (tant que)
Do While (faire tant que)
2.
Branchements conditionnels
If - Else (Si - Sinon)
Switch - Case
40
(brancher - dans le cas)
Départ de Génie Electrique Faculté des Sciences et
Téchniques de BENI MELLAL
10 mars 2008
3.
Branchements inconditionnels
Break (interrompre)
Continue (continuer)
Goto (aller à)
Return (retourner)
Exit (sortir)
41
Départ de Génie Electrique Faculté des Sciences et
Téchniques de BENI MELLAL
Les pointeurs
Notion de pointeur
Une valeur de type pointeur repère une variable. En pratique, cela
signifie qu'une valeur de type pointeur est l'adresse d'une variable.
42
Départ de Génie Electrique Faculté des Sciences et
Téchniques de BENI MELLAL
10 mars 2008
Exemples :
int *pi;
pi est un pointeur vers un int
short int *psi; psi est un pointeur vers un
short int
double *pd;
pd pointeur vers un flottant
double précision
char *pc;
pc pointeur vers un char
43
Départ de Génie Electrique Faculté des Sciences et
Téchniques de BENI MELLAL
10 mars 2008
Opérateur adresse
L'opérateur & appliqué à une variable
délivre l'adresse de celle-ci ; cette adresse
pourra être affectée à une variable de type
pointeur.
par exemple :
int i; int *pi;
pi = &i; le pointeur pi repère la variable i

44
Départ de Génie Electrique Faculté des Sciences et
Téchniques de BENI MELLAL
10 mars 2008
Opérateur d'indirection
il délivre la valeur pointée.
par exemple :
int i;
int *pi;
pi = &i;
*pi = 2;
j = *pi + 1; une utilisation de la valeur pointée
par pi

45
Départ de Génie Electrique Faculté des Sciences et
Téchniques de BENI MELLAL
10 mars 2008
Exercice
1. Déclarer un entier i et un pointeur p vers un
entier ;
2. Initialiser l'entier à une valeur arbitraire et
faire pointer p vers i ;
3. Imprimer la valeur de i ;
4. Modifier l'entier pointé par p (en utilisant p,
pas i) ;
5. Imprimer la valeur de i.
46
Départ de Génie Electrique Faculté des Sciences et
Téchniques de BENI MELLAL
10 mars 2008
Une solution possible est donnée par:
#include <stdio.h>
void main()
{
int i; int *p; i = 1;
p = &i;
printf("valeur de i avant: %d\n",i);
*p = 2;
printf("valeur de i après: %d\n",i);
}
47
Départ de Génie Electrique Faculté des Sciences et
Téchniques de BENI MELLAL
10 mars 2008
Passage de paramètres
50

passer une valeur qui sera exploitée par l'algorithme
de la procédure (exemple sin(x)).
Une telle façon de passer un paramètre
s'appelle le passage par valeur

passer une référence d’une variable, de manière à
permettre à la procédure de modifier la valeur de cette
variable.
Une telle façon de passer un paramètre s'appelle
le passage par adresse.
Départ de Génie Electrique Faculté des Sciences et
Téchniques de BENI MELLAL
10 mars 2008
Etapes pour le passage par référence de
paramètres
51
1.
Dans la liste du prototype et de la définition de la
fonction, on déclare le paramètre avec l’opérateur
d’indirection (*).
2.
En passant un paramètre, vous passez une
adresse en appliquant l’opérateur adresse (&).
3.
Dans la définition de la fonction, appliquez
l’opérateur pointeur d’indirection chaque fois que
vous voulez accéder aux données.
Départ de Génie Electrique Faculté des Sciences et
Téchniques de BENI MELLAL
10 mars 2008
52
Exemples :
#include <stdio.h>
void double_val(int *p);
void main()
{
int i;
double_val(&i);
printf(“le résultat est: %d”,i);
}
void double_val ( int *p); {
*p=*p * 2;
}
Départ de Génie Electrique Faculté des Sciences et
Téchniques de BENI MELLAL
Les classes
Un objet est constitué d’attributs qui
caractérisent la structure de celui-ci.
L'objet est manipulé par des procédures
appelées méthodes.
L'ensemble des propriétés d'un objet (attributs
et méthodes) constitue un ensemble appelé
classe.
53
les objets:
• Un objet est une entité informatique comprenant :
– des données membres (ou champs ou attributs
ou variables d’instances)
– des fonctions membres (ou méthodes ou
routines)
Données membres
Fonctions membres
Exemple:
Classe ARTICLE
attributs de l'objet : Référence, Désignation, Prix Unitaire
et Quantité .
Nous pouvons définir comme méthodes de l'objet article
 Prix Ttc : Méthode permettant de calculer le prix TTC
d'un article
 Sortie Article : Méthode permettant de diminuer la
quantité en stock
 Entrée Article : Méthode permettant d'augmenter la
quantité en stock
56
Objet : exemples
Articles
m_référence
m_désignation
m_prix
m_quntité
Calculprix()
Stock()
Alimenter stock()
quatitéstock()
Nom de la classe
Données membres
ou attributs
Fonctions membres
ou méthodes
CompteBancaire
m_numéro
m_solde
m_propriétaire
Créditer()
Débiter()
Fermer()
Numéro()
Solde()
Propriétaire()
Propriétés d’un objet

Un objet possède un état :
L’état correspond à la valeur de ses attributs à un instant
donné. Il peut varier au cours du temps.

Un objet est décrit par une classe :
Une classe est un prototype qui définit des attributs et des
méthodes communes à tous les objets d'une certaine nature.
C’est donc un modèle utilisé pour créer plusieurs objets
présentant des caractéristiques communes.
Deux objets peuvent être distincts même si tous leurs attributs ont
des valeurs identiques.
•
Classe : interface d’une classe
protected :
float m_cX, m_cY;
float m_a, m_b;
public :
void deplace(float dx, float dy);
void zoom(float z);
float surface();
les coordonnées du centre (cX, cY), a grand axe et b petit axe .
•
Visibilité des membres :
– public : membres accessibles à tous
– private : membres accessibles à partir de la classe ; accès impossible par
l’extérieur
– protected : membres accessibles à partir de la classe et des classes
dérivées ; accès impossible par l’extérieur
Classe : implantation
Interface de la classe Ellipse
class Ellipse
{
protected :
float m_cX, m_cY;
float m_a, m_b;
public :
void deplace(float dx, float dy);
void zoom(float z);
float surface();
};
définition des fonctions associées
void Ellipse::deplace(float dx, float dy)
{
m_cX += dx;
m_cY += dy;
}
void Ellipse ::zoom(float z)
{
m_a *= z;
m_b *= z;
}
float Ellipse ::surface()
{
return 3.14 * m_a * m_b / 4.;
}
63
:: est l’Opérateur de portée
Classe : instanciation
Interface de la classe Ellipse
class Ellipse
{
protected :
float m_cX, m_cY;
float m_r;
public :
void deplace(float dx, float
dy);
void zoom(float z);
float surface();
};
Implantation de la classe
Ellipse
void Ellipse::deplace(float
dx, float dy)
{
m_cX += dx;
m_cY += dy;
}
void Ellipse::zoom(float z)
{
m_a *= z;
m_b *= z;
}
float Ellipse::surface()
{
return 3.14 * m_a * m_b /
4.;
}
Instancier une classe permet de créer un objet
(analogue à une déclaration de variable)
Instanciation
statique de l’objet
e, e étant une
variable de type
Ellipse
int main()
{
Ellipse e;
Accès aux
membres
par le "."
e.deplace(50, 0);
float s = e.surface();
e.zoom(1.5);
e.m_cX = 30;
Impossible
e. deplace(20);
Impossible
}
65
//
//
Organisation des fichiers
ellipse.h
class Ellipse
{
protected :
float m_cX, m_cY;
float m_a, m_b;
public :
void deplace(float dx,
float dy);
void zoom(float z);
float surface();
};
ellipse.cpp
main.cpp
#include “ellipse.h”
#include "ellipse.h"
void Ellipse::deplace(float dx, float dy)
{
m_cX += dx;
m_cY += dy;
}
void Ellipse ::zoom(float z)
{
m_a *= z;
m_b *= z;
}
float Ellipse :: surface()
{
return 3.14 * m_a * m_b / 4.;
}
int main()
{
Ellipse e;
e.deplace(50, 0);
float s = e.surface();
e.zoom(1.5);
return 0;
}
Remarques:
• Par convention, l'extension d'un fichier contenant du code C est
.cpp, c, cc ...
• L'extension d'un fichier de déclarations, appelé header, est .h
• Par convention, on crée un fichier .cpp et un .h par classe,
chaque fichier ayant le nom de la classe en minuscule.
• Par convention, les noms de classe commencent par une
majuscule, les données membres par _ ou m_, les fonctions
membres par une minuscule.
67
Constructeurs de classe

Le constructeur est une fonction membre qui sert à initialiser les données
membres de l’objet

Systématiquement appelée quand une instance de classe
est créée.

N’a pas de type de retour

Porte le nom de la classe

Un constructeur sans argument est un constructeur par
défaut.

Un constructeur doit être déclaré avec le mot clé public.
Destructeur de classe

69
Le destructeur est une fonction membre systématiquement appelée
juste avant la destruction d’un objet

Porte le nom de la classe et est précédé de ~

Pas de type de retour

Pas d’arguments

Un seul par classe

Permet de détruire l’objet et libérer la mémoire.
Pointeurs vers des objets
Comme dans le cas des pointeurs vers des variables, on peut aussi
utiliser des pointeurs vers des objets. Ceci permet de créer des objets
de façon dynamique.
C++ possède les opérateurs new et delete pour la création dynamique
d’objets. L’opérateur new retourne un pointeur.
Chaine *pChaine;
pChaine= new Chaine;
.
.
.
delete pChaine
70
Surcharge d’opérateurs
La surcharge est un autre concept important de C++, la surcharge utilise le type
pour distinguer la manière d’opérer les fonctions et des opérateurs.
Surcharger c’est réutiliser un nom de fonction ou d’opérateur. Les fonctions
surchargées sont complètement distinctes les unes des autres et ont des
définitions et des déclarations différentes.
Exemples:
Constructeurs d’une classe.
Opérateurs + , - ,x, assignement(=).
71
Exemple:
ellipse.h
class Ellipse
{
public :
Ellipse(); // Constructeur par
défaut
Ellipse (float x, float y, float a,
float b);
Ellipse(const Ellipse & e);
~Ellipse(); // Destructeur
ellipse.cpp
#include “ellipse.h”
prog.cpp
Ellipse::Ellipse()
{
m_cX = m_ cY = 0;
m_a = m_b = 1;
}
int main()
{
Ellipse e;
Ellipse* pE = new Ellipse(2.5, 6.5,
12, 15);
#include "ellipse.h"
etc …
protected :
float m_cX, m_cY;
float m_a, m_b;
Ellipse::~ Ellipse()
{
// Libération des ressources
}
public :
void deplace(float dx, float dy);
void zoom(float z);
float surface();
};
void Ellipse::deplace(float dx,
float dy)
{
m_cX += dx; m_cY += dy;
}
etc …
delete pE;
// appelle le
destructeur pour pE
return 0;
// Le destructeur est implicitement
appelé pour e.
}
Héritage
• L’héritage permet de former une nouvelle classe à partir de
classes existantes.
• La nouvelle classe (classe fille, sous-classe) hérite des attributs et
des méthodes des classes à partir desquelles elle a été formée (classes
mères, super-classes).
• De nouveaux attributs et de nouvelles méthodes peuvent être définis
dans la classe fille.
• Des méthodes des classes mères peuvent être redéfinies dans la
classe fille.
73
Exemple:
Un cercle est un spécialisation d'une ellipse, il en possède les propriétés plus d'autres qui lui sont
spécifiques. On dérive donc la classe Cercle de la classe Ellipse.
Forme
Ellipse
Cercle
Rectangle
Carre
Héritage
ellipse.h
class Ellipse
{
public :
Ellipse();
Ellipse (float x, float y, float a, float b);
Ellipse(const Ellipse & e);
~Ellipse();
protected :
float m_cX, m_cY;
float m_a, m_b;
public :
void deplace(float dx, float dy);
void zoom(float z);
float surface();
Autorise la
virtual void affiche();
redéfinition de
};
la fonction
dans les
classes
ellipse.cpp
dérivées
#include <stdio.h>
void Ellipse::affiche()
{
// Code pour afficher l’ellipse.
}
Définitions des autres fonctions
cercle.h
prog.cpp
#include “ellipse.h”
#include "cercle.h"
class Cercle : public Ellipse
{
public :
Cercle();
Cercle (float x, float y, float diametre);
~ Cercle();
public :
virtual void affiche();
};
int main()
{
Cercle c(5, 5, 15);
c. affiche();
return 0;
}
cercle.cpp
#include <stdio.h>
#include “cercle.h”
Le constructeur de la classe
dérivée appelle généralement
un des constructeurs de la
classe de base.
Cercle::Cercle() : public Ellipse()
{
}
Cercle::Cercle(float x, float y, float diametre) : public Ellipse( x, y, diametre,
diametre)
{
}
void Cercle::affiche()
{
// code pour afficher le cercle .
}
Téléchargement