Vous êtes sur la page 1sur 24

Université des Frères Mentouri – Constantine - 1

Faculté des ST - Département d'Electronique

Dr. Amina HAMEURLAINE


am.hameurlaine@gmail.com
amina.hameurlaine@umc.edu.dz

2020/2021

Cours Programmation Orientée Objet en C++ Dr. A.HAMEUR LAINE


Cours Programmation Orientée Objet en C++ Dr. A.HAMEUR LAINE
Représentation C++
Représentation UML
class NomClasse {
private:
NomClasse
type attribut1;
Attributs - attribut1: type
1.

type attribut2;
Droits d’accès - attribut2:type
protected:
+ public #attribut3: type
type attribut3;
- private
public: # protected +méthode1()
type Methode1(arguments) +méthode2()
{ // définition de la methode1 } Méthodes
type Methode2(arguments)
{ // définition de la methode2} Règle d’encapsulation:
}; Tous les attributs d’une classe
doivent toujours êtres privés (ou
projetés).

La création des classe doit se faire hors le main ().

Cours Programmation Orientée Objet en C++ Dr. A.HAMEUR LAINE


Rectangle

class Rectangle { - hauteur: double


- largeur: double
private:
double hauteur; +surface()
variables typées
double largeur;

public:
double surface ()
{ return hauteur * largeur; }
};

Cours Programmation Orientée Objet en C++ Dr. A.HAMEUR LAINE


Rectangle

class Rectangle { - hauteur: double


- largeur: double
private:
double hauteur; +surface()
double largeur;

public: Méthode = Fonction


double surface ()
{ return hauteur * largeur; }
};

Cours Programmation Orientée Objet en C++ Dr. A.HAMEUR LAINE


Il existe 2 types de méthodes .
 Des méthodes qui modifient l’ état de l’objet => Actions
 Des méthodes qui ne changent rien à l’objet => Prédicats

 Pour indiquer qu’une méthode est un prédicat, on utilise le mot clé


const.
Exemple:

public:
double surface () const
{ return hauteur * largeur; }

Cours Programmation Orientée Objet en C++ Dr. A.HAMEUR LAINE


Rectangle
La création d'un objet se fait comme la déclaration d'une variable d'un
autre type. - hauteur: double
- largeur: double
 La création se fait dans le main()
 Un objet peut être alloué statiquement ou dynamiquement. +surface()
rect1
1: Statiquement:
largeur = 4
Syntaxe: hauteur = 2
rect2
NomClasse nomObjet1, nomObjet2; largeur = 3.2
//ou: //tableau d’objets rect3 hauteur = 4.2
NomClasse Tab_objet [taille]; largeur = 5
hauteur = 8

Exemple:
Int main() {
Rectangle rect1, rect2, rect3 ;
Rectangle Tab_rect [5];
}

Cours Programmation Orientée Objet en C++ Dr. A.HAMEUR LAINE


2: Dynamiquement:
Syntaxe:
NomClasse *nomPointeur = new NomClasse;
//Ou: tableau dynamique d'objets
NomClasse *nomPointeur = new nomClasse [taille];
// -------------------
// a la fin du programme
delete nomPointeur ;
nomPointeur = 0 ;

Exemple:
Int main() {
Rectangle *p1 = new Rectangle; Rectangle
*p2 = new Rectangle [5];
//--------------a la fin du programme
delete p1; delete p2; p1=0; p2=0;
}

Cours Programmation Orientée Objet en C++ Dr. A.HAMEUR LAINE


class Rectangle {
private:
double hauteur;  Tous les attributs sont
double largeur; en mode privé!
On peut pas y accéder
public: depuis l’extérieur de la
double surface () const classe!!!!
{ return hauteur * largeur; }
};
Int main() {
 Comment faire pour les
Rectangle rect1;
initialiser alors??!!
rect1.hauteur = 2;
rect1.largeur = 4;
cout <<Rect1.surface()<<endl;
}

Cours Programmation Orientée Objet en C++ Dr. A.HAMEUR LAINE


class Rectangle {
Solution 1: Manipulateurs (setters) /
private: Accesseurs (getters):
double hauteur;
double largeur; Setter: Action qui permet:
public:  Modification des valeurs des attributs;
void setHauteur (double h) { hauteur = h; }
void setLargeur (double L) { largeur = L; }  Affectation des valeurs aux attributs.
double getHauteur () const { return hauteur ; }
=> Pas de retour .
double getLargeur () const { return largeur ; }
double surface () const  Gettre: Prédicat qui permet:
{ return hauteur * largeur; }  Consultation d’un attribut: lecture
}; seule.
Int main() {
Rectangle rect1; => Retour de la valeur d’un attribut.
rect1.setHauteur (2); rect1.setLargeur (4);
cout <<rect1.getHauteur()<<endl;
cout <<rect1.getLargeur()<<endl;
cout <<rect1.surface()<<endl;
}
Cours Programmation Orientée Objet en C++ Dr. A.HAMEUR LAINE
Solution 2:

En c++, il y a des méthodes prédéfinies qui permettent d’initialiser


les attributs des objets.

Les Constructeurs

Cours Programmation Orientée Objet en C++ Dr. A.HAMEUR LAINE


 les constructeurs servent à construire les objet en mémoire.
 Leur rôle principal est d'initialiser les attributs des objets.
 Ils sont appelés lors de la création des objets.
 Un constructeur est une méthode sans aucun type de retour.

Règles de création:
Il faut que le constructeur ait le même nom que la classe.
Le constructeur ne doit rien renvoyer, pas même void !
une classe peu contenir plusieurs constructeurs.

Ou: Cours Programmation Orientée Objet en C++ Dr. A.HAMEUR LAINE


Syntaxe:

public:
nomConstructeur (arguments)
{ //Initialisation des attributs }

Ou:

public:
nomConstructeur (arguments) : initialisation1, initialisation2 //liste d'initialisations
{ } //le corps est vide

Cours Programmation Orientée Objet en C++ Dr. A.HAMEUR LAINE


Exemple:
class Rectangle { class Rectangle {
private: private:
double hauteur; double hauteur;
double largeur; double largeur;
public: public:
Rectangle (double h, double L) { ou Rectangle (double h, double L) : hauteur(h), largeur(L)
hauteur = h; { }
largeur = L; }
double surface () const double surface () const
{ return hauteur * largeur; } { return hauteur * largeur; }
}; };
Int main() { Int main() {
Rectangle rect1(2, 4); Rectangle rect1(2, 4);
cout <<Rect1.surface()<<endl; cout <<Rect1.surface()<<endl;
} }

Cours Programmation Orientée Objet en C++ Dr. A.HAMEUR LAINE


Exemple:
class Rectangle { class Rectangle {
private: private:
double hauteur; double hauteur;
double largeur; double largeur;
public: public:
Rectangle (double h, double L) { ou Rectangle (double h, double L) : hauteur(h), largeur(L)
hauteur = h; { }
largeur = L; }
double surface () const double surface () const
{ return hauteur * largeur; } { return hauteur * largeur; }
}; };
Int main() { Int main() {
Rectangle rect1(2, 4); Rectangle rect1(2, 4);
cout <<Rect1.surface()<<endl; cout <<Rect1.surface()<<endl;
} }

On appelle le constructeur Rectangle pour l’objet rect1 avec les paramètres 2 et 4


Cours Programmation Orientée Objet en C++ Dr. A.HAMEUR LAINE
class Rectangle {
private:
double hauteur;
Attention! double largeur;
public:
Rectangle (double h, double L) : hauteur(h), largeur(L)
{ }
double surface () const
{ return hauteur * largeur; }
};
Int main() {
Rectangle rect1(2, 4);
Rectangle rect2(6);
Mais si on appelle le constructeur Rectangle rect3;
avec un seul paramètre ou bien Rectangle rect4(rect1); // constructeur de copie
sans mettre des paramètres?! cout <<Rect1.surface()<<endl;
cout <<Rect2.surface()<<endl;
cout <<Rect3.surface()<<endl;
}

Cours Programmation Orientée Objet en C++ Dr. A.HAMEUR LAINE


class Rectangle {
private:
double hauteur;
Solution: double largeur;
public:
Rectangle (double h=0, double L=0) : hauteur(h),
Déclaration des constructeurs largeur(L) { }
avec initialisation de 0. double surface () const
{ return hauteur * largeur; }
};
Int main() {
Rectangle rect1(2, 4);
Rectangle rect2(6);
Rectangle rect3;
Rectangle rect4(rect1); // constructeur de copie
cout <<Rect1.surface()<<endl;
Note:
cout <<Rect2.surface()<<endl;
Un constructeur qui n’a pas de cout <<Rect3.surface()<<endl;
paramètres s’appelle }
«constructeur par default ».

Cours Programmation Orientée Objet en C++ Dr. A.HAMEUR LAINE


 Le destructeur est une méthode appelée lorsque l'objet est supprimé de la
mémoire.
 Son rôle principal est de libérer la mémoire (via des delete) qui a été
allouée dynamiquement.
 Il porte le même nom que la classe, précédé du symbole ~
 Il est appelé automatiquement `a la fin du programme.

~nomDestructeur()
{} le destructeur ne renvoie rien et ne prend aucun
Ou: argument.

~nomDestructeur(){ une classe ne peut contenir qu’un seul


delete attribut1; destructeur (pas d’argument).
delete attribut2;
}

Cours Programmation Orientée Objet en C++ Dr. A.HAMEUR LAINE


On peut définir des méthodes à l’extérieur de la classe.
La classe ne contient que des prototypes (déclaration seule);
Les détailles des méthodes sont à l’extérieur de la classe.
La définition de la méthode doit être reliée à la classe concernée en
utilisant l’operateur :: .
class NomClasse {
private:
type attribut1;
type attribut2;
public:
type nomMethode(arguments); // prototype de la methode1
};

Type NomClasse : : nomMethode(arguments)


{ // définition de la methode1
}
Cours Programmation Orientée Objet en C++ Dr. A.HAMEURLAINE
 On peut séparer la déclaration des classes et la définition des méthodes
dans des fichiers différents pour avoir un code plus modulaire.
 Pour chaque classe, on peut créer :
un header (nomClasse .h) qui contiendra les attributs et les
prototypes des méthodes de la classe ;
un fichier source (nomClasse.cpp) qui contiendra la définition (le
corps) des méthodes.

Cours Programmation Orientée Objet en C++ Dr. A.HAMEUR LAINE


Exemple:
 Fichier (Rectangle.h) : déclaration de la classe Rectangle, ses attributs et
les prototypes de ses méthodes.

Dans les fichiers .h, il est recommandé


de ne jamais mettre la directive using
namespace std;
Pour les variables de type string, il faut
rajouter le préfixe std:: devant
chaque string du .h.
Cours Programmation Orientée Objet en C++ Dr. A.HAMEUR LAINE
Exemple:
 Fichier (Rectangle.cpp):définitions des méthodes de la classe Rectangle.

On peut rajouter ici un using


namespace std;.
On a le droit de le faire car on
est dans le .cpp.

Cours Programmation Orientée Objet en C++ Dr. A.HAMEUR LAINE


Exemple:
 Fichier (main.cpp):Créations des objets + appels des méthodes.

Il faut inclure les fichiers Rectangle.h et


Rectangle.ccp .
 « Apprendre le C++ », M. Hamemerchmidt.
 « Apprendre le C++ », C. Delonnoy.
 « Programmation en Langage C++ : Cours et Travaux Pratiques », B.
Boukhezzar.
 http://www.cplusplus.com/doc/tutorial/
 https://openclassrooms.com/courses/programmez-avec-le-langage-
c/qu-est-ce-que-le-c-2
 https://fr.coursera.org/learn/cpp-poo
 http://carl.seleborg.free.fr/cpp/cours/index_cours.html

Cours Programmation Orientée Objet en C++ Dr. A.HAMEURLAINE

Vous aimerez peut-être aussi