Vous êtes sur la page 1sur 5

Les classes, les objets

Une classe est un type de données

#ifndef POINT_H
#define POINT_H

//déclaration d’une classe


class Point
{
private: //accessible uniquement par la classe
float abs; //les attributs membres de la classe
float ord;
public: //accessible à tous
Point(); //constructeur des objets sans paramètres
Point(float,float); //constructeur des objets avec paramètres
virtual ~Point(); //destructeur des objets
void affiche(); //des méthodes membres de la classe
void setval();
};

#endif // POINT_H

Encapsulation des données : les données ne sont accessibles que par des
méthodes de la classe
Implémentation des méthodes

#include "Point.h" //la classe


#include <iostream> //classe E/S
using namespace std; //espace de noml

Point::Point() //constructeur d’un objet de type Point


{
//ctor
}

Point::~Point() //destructeur
{
//dtor
}
Point::Point(float a,float b) //constructeur initialisant l’abscisse et l’ordonnée
d’un point
{
abs=a;
ord=b;
}
void Point::affiche() //affiche l’abscisse et l’ordonnée d’un point
{
cout<<abs<<" "<<ord<<endl; //instruction d’affichage
}
void Point::setval() //modifie les valeurs d’un point
{
float a,b;
cin>>a>>b; //saisie des données
abs=a; //affectation
ord=b;
}

Traitement des objets

#include <iostream>
#include "Point.h" //la classe Point

using namespace std; //espace de noms

int main()
{
Point a; //création d’un objet a sans valeur
a.setval(); //initialse les valeurs de a
Point b(3,5) //création d’un objet b d’abscisse 3 et d’ordonnée 5;
a.affiche(); //affiche les données de a
b.affiche(); //affiche les données de b
cout << "Hello world!" << endl;
return 0;
}

Exercices :
Créer une classe caractère qui initialise, affiche un caractère.
Créer une classe rectangle qui initialise, affiche un rectangle et calcule la
surface d’un rectangle
Les accesseurs, méthode amie
Ils permettent l’accès aux données get, set

float getabs(){return abs ;}


void setval{float x, float y)
{
abs=x ;
ord=y ;
}

Exercice
Définir les accesseurs pour afficher et modifier les coordonnées d’un point

friend
Une méthode amie friend est déclarée dans une classe pour lui permettre
l’accès aux membres privés

// déclaration d’un opérateur ami de la classe Point


friend ostream &operator<<(ostream &os, Point &p) ;
//implémente la méthode amie
ostream &operator<<(ostream &os, Point &p)
{
return os << ‘’(‘’<<p.abs<<p.ord<<’’)’’<<endl ;
}
//Utilisation
cout<<p1<<endl ;

Exercices
Créer une méthode friend pour calculer la somme de 2 points

Constructeur par recopie


Point(Point &p) ; //déclaration
Point ::Point(Point &p) //implémentation
{
abs=p.abs ;
ord=p.ord ;
}
Point p5(p2) ; //utilisation
Les opérateurs, attribut statique

Il est possible de définir plusieurs opérateurs dans une classe +,= etc…
friend Point &operator+(Point &p1,Point &p2)
{
Point result(p1.abs+p2.abs,p1.ord+p2.ord) ;
return result ;
}

Point p1(2,3) ;
Point p2(4,5) ;
Point p3 ;
p3=p1+p2 ;

Point ::Point operator=(Point &p)


{
abs=p.abs ;
ord=p.ord ;
return *this ;
}

Point p1(2,3) ;
Point p2 ;
p2=p1 ;

Exercices :
Créer 2 opérateurs * et ==

Attribut statique
C’est un attribut partagé par tous les objets de la classe
Exemple de déclaration

Class Point
{
….
static int nbpoints ;

}

La réservation se fait dans le fichier d’implémentation


int Point ::nbpoints=0 ;
Utilisation
Point ::nbpoints++ ;

Exercice
Afficher le nombre de points utilisé