Académique Documents
Professionnel Documents
Culture Documents
2023 - 2024
Atelier C++
Filière: RT2/GL2
1
C++: Plan
2
Logiciels à utiliser:
CodeBlocks
3
C++: Présentation
6
Notion d’Objet
Un objet est une entité informatique comprenant:
• des données membres (ou champs/attributs/variables
d’instances)
• des fonctions membres (ou méthodes/routines)
8
Représentation d’une Classe (UML)
Véhicule Nom de la classe CompteBancaire
nbVitesses
numéro
Vision Matricule
Données membres solde
interne tailleRoues ou attributs
couleur propriétaire
(privé)
Poids Créditer()
Fonctions membres Débiter()
Accélérer() ou méthodes
Fermer()
Freiner()
Vision ChangerVitesse()
Numéro()
externe Solde()
GetCouleur()
(public) Propriétaire()
GetMatricule()
Remarque:
L'accès aux données et méthodes est réglementé (partie privé/partie publique)
la vision externe peut aussi contenir des variables publiques
9
Représentation d’une Classe (C++)
Type d’attributs
Entêtes de
méthodes
10
Classe et Objet
Ne pas confondre classe d'objets et instance d'objet
11
Classe et Objet:
Exemple 1
13
Concept Orienté Objets
Encapsulation
On appelle encapsulation le regroupement des variables
et des fonctions au sein d'une même entité:
14
Concept Orienté Objets
Abstraction
On appelle abstraction le fait de masquer toutes les
informations non pertinentes d'un objet à des fins de
simplification et d'efficacité.
Par exemple :
Il est possible de représenter un objet véhicule par trois
champs uniquement:
1.matricule
2.modèle
3.couleur
(et d’autres bien entendu)
15
.
Mini-Projet 1
Gestion de formes géométriques: Ellipse/Cercle
Ellipse
Cercle
17
Etape 1: Création d’interface Ellipse (2)
Syntaxte:
Instancier une classe est le fait de créer un objet ayant pour type
la classe déclarée (dans une fonction ou dans le main() par
exemple )
(analogue à une déclaration de variable)
22
Etape 3: Instanciation d’une Classe (2)
Dans main.cpp par exemple :
#include "ellipse.h"
int main() Instanciation
{ statique de l’objet
Ellipse e; e, e étant une
variable de type
Ellipse
e.deplace(50, 0);
float s = e.surface(); Accès aux
e.zoom(1.5); membres par le
e.affiche(); "."
#include "ellipse,h"
void main()
{
Ellipse e;
e.deplace(50, 0)
float s = e.surface();
e.zoom(1.5);
e.affiche();
}
24
Solution : Constructeurs de classe
25
Types de Constructeurs de classe
27
Constructeurs avec paramètres
La notation:
Est Equivalente à
30
Notion d’héritage
32
Notion d’héritage:
Exemple 2
L’héritage permet de spécialiser une classe en définissant une relation
de type « est une sorte de ».
Ellipse Rectangle
Cercle Carre
33
Etape 5 : Implantation du classe Cercle
(Dérivée de Ellipse)
cercle.h main.cpp
#include “ellipse.h” #include "cercle.h"
35
Propriétés héritage
36
Propriétés héritage
pE = &E;
pC= pE; // ERREUR ! pointer sur un E n’est pas pointer sur un C 37
Propriétés héritage
Conclusion :
Traiter un type dérivé comme s’il était son type de base est
appelé transtypage ascendant ou surtypage (upcasting)
38
L’héritage
Propriétés héritage
Appel de constructeur (1/2)
Propriétés héritage
Appel de constructeur (2/2)
// Classe de base
class Personne {
private:
string nom;
public:
Personne(string n) { nom = n }
};
// Classe dérivée
class Etudiant: public Personne {
private:
string NumEtud;
public:
Etudiant(string nom, string
NumEtud):Personne(nom),NumEtud(NumEtud)
{ }
};
Propriétés héritage
Héritage Multiple
Une classe dérivée peut fournir une nouvelle définition d’une méthode
d'une classe parent car elle peut avoir besoin de réagir différemment à
l'appel de cette méthode.
Cette redéfinition substituera une méthode à une autre : c’est la
spécialisation.
spécialisation
Notion de polymorphisme
Présentation (2/2)
Cercle
affiche()
46
Notion de polymorphisme :
Appel de méthodes
#include " cercle.h" Appelle la fonction affiche() de
la classe Ellipse.
int main()
La fonction deplace() n’est pas
{ redéfinie dans la classe Cercle,
Ellipse e(0, 0, 8.5, 10.2); appelle celle de Ellipse.
e.deplace(-1, 1);
e.affiche();
...
Cercle c;
int main() {
Animal* a = new Chat; / / Transtypage
ascendant
• Variable : associe un nom (un symbole) à une valeur qui peut éventuellement varier au cours du temps ;
une variable est d’un type donné, défini une fois pour toute (type prédéfini dans le langage ou créé par le
développeur).
• Encapsulation : regroupement des variables et des fonctions au sein d'une même entité appelée
« classe ».
• Classe : prototype qui définit des attributs et des méthodes communes à tous les objets d'une certaine
nature.
• Interface de classe : description de la structure interne de la classe incluant une liste des données
membres et le prototype des fonctions membres ; dans un « .h ».
• Implantation de classe : définition (code) des fonctions déclarées dans l’interface de classe ; dans un
« .cpp ».
• Instanciation d’un objet : permet de créer un objet d’un type donné ; analogue à une déclaration de
variable.
• Héritage : permet de définir une hiérarchie de classe, chaque classe fille héritant des méthodes et des
données de son/ses antécédent(s).
• Polymorphisme : deux objets héritant une même méthode d'une classe parente, peuvent réagir de façon
différente à l'appel de cette méthode et, à cette fin, redéfinir la méthode. Il est ensuite possible d'appeler
la méthode d'un objet sans se soucier de son type intrinsèque.
62