Cours POO C++ Partie I
Cours POO C++ Partie I
Cours POO C++ Partie I
PROGRAMMATION AVANCÉE
CONCEPTION ORIENTÉE OBJET (C++)
S. EL GAROUANI
Objectifs
1
Sommaire
LANGAGE c++
2
Présentation et Apport du langage C++
Commentaires
Les commentaires C++ s’écrivent par //
Modificateur const
les objets entiers qualifiés par const peuvent être utilisés comme taille lors de la
déclaration de tableaux statiques
3
Présentation et Apport du langage C++
4
Présentation et Apport du langage C++
#include<iostream.h>
void main(){
float a, b,x;
std::cout<<" a = " ; std::cin>>a;
std::cout<<" b= " ; std::cin>>b;
if(a==0)
if(b==0) std::cout<<"Infinités de solutions "<<std::endl;
else std::cout<<"Pas de solution"<<std::endl;
else{
x=-b/a;
std::cout<<"La solution est : "<<x<<std::endl;}
}
5
Présentation et Apport du langage C++
Exemple1 :
l’appel fct ('a') sera équivalent à fct ('a', 10, 0.0) ; de même, l’appel fct ('x', 12)
sera équivalent à fct ('x', 12, 0.0).
En revanche, l’appel fct () sera illégal.
6
Présentation et Apport du langage C++
Exemple :
void main(){
int n, *p = new int; // allocation d’un seul entier
cin >> *p;
…
delete p;
…
cin>>n;
p = new int[n]; // allocation de n entiers
for(int i=0;i<n;i++)
cin>>p[i] //cin >>*(p+i);
…
delete[ ] p;
7
Présentation et Apport du langage C++
Les références
Une référence est un pointeur sur un objet variable de la mémoire. Elle
constitue une adresse gérée de manière interne par la machine :
hormis lors de son initialisation, toute opération exécutée sur la
référence agit directement sur l'objet référencé, et non pas sur l'adresse.
Exemple
Ref_a = b ;
Cout << "a = " << a << " et ref_a = " << ref_a << endl;
//Affcihe a = 20 et ref_a=20
Les références
une référence sur une variable est un identificateur qui joue le rôle d'un alias
(pseudo) de cette variable.
Syntaxe: type &nom_ref = var;
exemple:
int n;
int &rn=n; // rn est une référence de n
n=10;
cout<< rn; //affiche 10
Une référence ne peut être vide, elle doit toujours être initialisée lors de sa
déclaration, i.e : int &rn ; // erreur!
Il est possible de référencer des valeurs numériques, dans ce cas il faut les
déclarer comme constantes, i.e: int &rn=3; // erreur!
const int &rn=3; // OK
Les références et les pointeurs sont liés.
8
Présentation et Apport du langage C++
Transmission des arguments
En C++ il y a 3 méthodes de passage des variables en paramètres à une
fonction:
Passage par valeur: la valeur de la variable en paramètre est copiée
dans une variable temporaire. Les modifications opérées sur les
arguments dans la fonction n'affectent pas la valeur de la variable
passée en paramètre.
Passage par adresse: consiste à passer l'adresse d'une variable en
paramètre. Toute modification du paramètre dans la fonction affecte
directement la variable passée en paramètre.
Passage par référence: le passage par adresse présente certains
inconvénients, pour résoudre ces inconvénients, C++ introduit le
passage par référence.
En pratique, il est recommandé ( pour des raisons de performances) de
passer par référence tous les paramètres dont la copie peut prendre
beaucoup de temps.
Exemple :
9
CONCEPTS DE L’APPROCHE ORIENTÉE OBJET
Objectifs
Encapsulation,
composition
Héritage,
Polymorphisme
10
Concepts de l’approche orientée objet
Principes
Chaque objet appartient à une Classe qui représente tous les objets
similaires.
Un programme objet est alors une séquence d'instructions qui défini des
classes et qui construit, et utilise des objets de ces classes.
Exemples
La classe Article est composée des membres suivants :
Membres privés : Référence, PrixUnitaire, Quantité
Membres publiques : PrixTTC, EntréeArticle, SortieArticle
La classe Compte bancaire est composée des membres suivants :
Privés : Code, Solde, dateCréation
Publiques : Verser, retirer, consulter
11
Concepts de l’approche orientée objet
Objets et classes
1. Objet
Un objet est une représentation concrète d’une entité du monde réel. Il est
formé de deux composantes indissociables :
son état : les valeurs prises par une ou plusieurs variables
son comportement : les opérations qui lui sont applicables
Etat
l’état d’un objet est cachée aux autres objets( privé)
les variables représentant l'état d'un objet sont appelées variables
d'instance ou attributs ou données membres
chaque objet possède sa propre copie des variables d'instance et un état
courant (liste des valeurs de chaque variable d’instance)
Comportement
Caractéristique externe mise à la disposition de l’extérieur (publique)
les opérations propres à un objet sont appelées méthodes d'instance ou
fonctions membres. Ces méthodes sont invoquées par rapport à l’objet
//message généré par l’appelant à l’objet Objet_X
Objet_X . Nom_Methode(paramètres)
Classe
Remarques
Une classe peut contrôler l'accès à ses membres (données ou fonctions) :
Privé : accès limité à la classe
Protégé :accès limité à la classe et à ses sous-classes(héritage)
publique : accès non limité
12
Concepts de l’approche orientée objet
La composition
Des objets peuvent être inclus les uns dans les autres. Par exemple, on peut
dire qu'une voiture est composée d'un moteur et de quatre roues :
Dans la classe Voiture dite classe composite sont incluses deux classes
composantes : Roue et Moteur. Cela signifie que tout objet, instance de la
classe Voiture disposera obligatoirement d'un moteur et de quatre roues.
Méthodes et surcharge
Il existe différents types de méthodes :
Constructeur : appelé automatiquement à la création d'un objet
initialiser un objet afin de le placer dans un état cohérent
fixe l'invariant de la classe
Destructeur : appelé automatiquement à la destruction de l'objet
permet de libérer les ressources allouées par l'objet
Accesseur(getter) : permet de consulter l'état d'un objet
Mutateur(setter): permet de modifier l' état d'un objet
La surcharge (Overloading) d'une méthode consiste à définir plusieurs
méthodes de même nom mais de signatures différentes.
13
Concepts de l’approche orientée objet
Exemple :
C1 : Compte
Compte Code : 1
- Code : Entier DateCréation : 10/11/95
- DateCréation : Char* Solde : 15000
- Solde : Réel
C2 : Compte
Compte()
Code : 2
Compte(S : Réel)
DateCréation : 1/11/98
Compte(&C:Compte) Solde : 5000
~Compte()
GetSolde() : Réel
Verser(M : Réel) C3 : Compte
Retirer(M : Réel) Code : 3
DateCréation : 12/05/99
Solde : 35000
Héritage
L’héritage est un outil d’abstraction utilisé pour la généralisation et le
groupement. Il permet de créer de nouvelles classes à partir de classes
existantes.
1. Terminologie
Les classes dérivées sont dites : «classes filles», ou «sous classes».
Les classes d’origine sont dites : «super classes», ou « classe de base » ou
«classes parentes».
2. Remarques
Les sous classes héritent des attributs de leur super classe.
les sous classes peuvent avoir des membres qui leur sont propres.
Certaines méthodes d’une super classe peuvent être redéfinies dans les sous
classes.
Une sous classe peut avoir plusieurs super classes : on parle d'héritage
multiple
14
Concepts de l’approche orientée objet
Exemples
Héritage simple et agrégation :
Automobile électrique
Dessiner() Dessiner()
15
Concepts de l’approche orientée objet
Exemples
Chaine.h
# include <iostream>
using namespace std;
class chaine {
// std::string s;
string s;
int i;
public :
chaine();
bool boolean();
void afficher();
};
# include <string.h>
#include "chaine.h"
using namespace std;
void chaine::afficher(){
std::cout<< s; }
chaine::chaine(){
std::cout<< "entrer une chaine de caractère :";
getline(std::cin, s); ////saisir une chaine de caractères
// std::cin>>s; //l'espace non compté
i=s.size();
std::cout<<"nombre de caractères de la chaine est :"<< i <<std::endl;
boolean(); }
bool chaine::boolean(){
std::cout<< "entrer un nombre :";
std::cin >>i;
if (i>0)return std::cout<< true<<std::endl;
else return std::cout<<false<<endl; }
main (){
chaine ch;
ch.afficher(); }
S. EL GAROUANI ENSA Fès 2017-2018 32
16
CLASSES ET OBJETS
Classes et Objets
17
Classes et Objets
Déclaration
Une classe est déclarée avec le mot-clé class par :
class Nomclasse{
private : // partie accessible uniquement aux fonctions
// membres de la classe et aux fonctions amies
…
protected : // partie accessible aux fonctions membres et
// amies de la classe ainsi qu'aux classes dérivées
…
public : // accessible à tout utilisateur d'une instance de la classe
} ;
Remarques
• Par défaut, les membres d’une classe sont privés.
• Les expressions private, public et protected peuvent apparaître un
nombre quelconque de fois dans une classe.
Classes et Objets
Exemple
class Point
{
private:
int x; Données membres ( ou attributs) privés
int y;
public:
void initialise(int,int);
Méthodes public
void deplace(int,int);
void affiche();
} ;
18
Classes et Objets
Classes et Objets
19
Classes et Objets
Classes et Objets
Exemple :Implémentation de la classe Point
//fichierPoint.cpp
#include<math.h>
#include "Point.h«
using namespace std;
20
Classes et Objets
nom_classe nom_objet;
On peut accéder à n'importe quel membre publique d'une classe
en utilisant l'opérateur (.) (point). Par exemple:
Point A;
……
A.initialise(10,12); // appel de la fct membre initailise de la classe 'Point'
//Cout<<'' l'abscisse du point A est'' <<A.x<<endl; //erreur car x est un attribut privé!!
A.affiche();
Classes et Objets
Instanciation
La déclaration d’une instance (objet) d ’une classe donnée se fait par :
L'accès aux membres d'un objet, sous réserve qu'il est possible, est réalisé comme
pour le cas des structures par les opérateurs . et -> :
21
Classes et Objets
Exemple :
#include<stdlib.h> getch();
#include<conio.h> p2= new Point;
#include<stdio.h> p2->initialiser(15,20,'N');
#include"Point.h"
p2->afficher();
main(){
getch();
Point p1,*p2;
float d;
system("cls");
p1.initialiser(30,15,'M'); d=p1.distance(*p2);
p1.afficher(); printf("la distance de %c à %c est
getch(); %f\n",p1.getNom(),p2->getNom(),d);
p1.masquer(); getch();
getch(); delete p2;
p1.deplacer(10,0); }
Classes et Objets
Constructeur/Destructeur
C++ permet l'utilisation de fonctions membres dites
constructeurs et destructeur qui sont implicitement appelées
respectivement lors de la création et la destruction d'un objet.
22
Classes et Objets
Les constructeurs
Classes et Objets
Remarque
• Si une classe ne contient pas de constructeur par copie, le compilateur
synthétise un constructeur par copie automatique. Celui-ci recopie bit par
bit de l’objet source dans l’objet destination.
23
Classes et Objets
Destructeur
NomClasse::~NomClasse( ){
//Actions recquises }
Classes et Objets
24
Classes et Objets
25