Académique Documents
Professionnel Documents
Culture Documents
: 2009/2010
ENSI – II2
Rappels
Les Classes en C++ Une classe est une implémentation d’un type abstrait de
données,
Une classe est la généralisation de la notion de type
défini par l’utilisateur, dans lequel se trouvent associées
des données «Données membres» (ou attributs) et des
Déclaration et définition d’une classe fonctions «Fonctions membres» (ou méthodes).
Constructeur et Destructeur En POO pure, les données sont « encapsulées »
Surcharge des opérateurs
=> leur accès ne peut se faire que par le biais des
Données statiques
Généricité
méthodes.
C++ est un langage orienté objets :
http://msdn.microsoft.com/fr-fr/visualc/msdn.coach++.concepts.aspx
} }
illégal Affiche 10
1
Chapitre 4 : Les classes en C++ A.U. : 2009/2010
ENSI – II2
2
Chapitre 4 : Les classes en C++ A.U. : 2009/2010
ENSI – II2
Le constructeur et le
destructeur Constructeur & destructeur
L'initialisation des attributs a été faite par le modifieur void f(int);
class A { Un constructeur de A
Risque d'oubli !! public :
A(); Un constructeur surdéfini de A
A(int);
Constructeur ...
Le destructeur
• Une fonction membre portant le même nom que sa classe se nomme
~A();
un constructeur, void main()
• Un constructeur peut avoir des arguments mais ne renvoie pas de ...
{
valeur (aucune indication de type même pas void ). };
• Le constructeur est appelé implicitement tout juste après l’allocation A a;
Le constructeur de A est exécuté par A()
de l’espace mémoire destiné à l’objet, A * ptr;
Destructeur printf("%d \n",a.f());
Le constructeur de A est exécuté par A(int)
• Une fonction membre portant le même nom que sa classe, précédé du ...
symbole (~), se nomme destructeur,
ptr = new A(1);
• Un destructeur ne peut pas comporter d’arguments et il ne renvoie
... Le destructeur de A est exécuté
pas de valeur ( aucune indication de type ne doit être prévue ).
• Le destructeur est appelé implicitement avant la libération de l’espace delete ptr;
mémoire associé à l’objet, } Le destructeur de A est exécuté
3
Chapitre 4 : Les classes en C++ A.U. : 2009/2010
ENSI – II2
4
Chapitre 4 : Les classes en C++ A.U. : 2009/2010
ENSI – II2
cout (…)
formatage
cadrage
1
printf(" %5d", 1);
cout.width(5); cout << 1;
précision
3 . 1 4 1
printf(" %.3f", 3.1415927);
cout.precision(3); cout << 3.1415927;
cout & cerr & cin (…) Fichiers & Tampon (…)
Fichiers : ifstream / ofstream
cout : sortie standard ostream entrée / sortie
cerr : sortie des erreurs
#include <fstream>
cerr << " erreur " << endl;
ifstream fileIn("nom_fichier_physique");
fileIn >> x;
Tampon (buffer):
istream entrée / sortie istrstream, ostrstream
cin : entrée standard
#include <strstream>
int age; char * p = new char[20];
char name[20]; ostrstream ch(p, 20);
cin >> age >> name; ch << "age=" << 14;
5
Chapitre 4 : Les classes en C++ A.U. : 2009/2010
ENSI – II2
31 32
Exemple
#include <iostream>
#include <fstream>
using namespace std;
int main ()
cout …
{ int length;
char * buffer; class Horloge
// Création et ouverture de deux fichiers via les constructeurs {
ifstream infile ("test.txt",ifstream::binary); public:
ofstream outfile ("new.txt",ofstream::binary); …
// Calcul de la taille du fichier
};
infile.seekg (0, ios::end); // Position à la fin
// Récupération de la position de la fin de fichier
length = infile.tellg(); ostream &operator << (ostream &out, Horloge H)
infile.seekg (0, ios::beg); // Position du curseur au début {
// Allocation mémoire pour stocker le contenu du fichier return (out << C.valH() << ":" << C.valM() << ":" << C.valS() );
buffer = new char [length]; }
// Lecture du contenu d’un fichier en un seul bloc void main()
infile.read (buffer,length); {
outfile.write (buffer, length); // Écriture dans le fichier
Horloge h(23,59,57);
delete[] buffer;
infile.close(); outfile.close(); // Fermeture des fichiers cout << h << endl;
return 0; }
}
33 Les classes en C++ 34
Exemple
// Redéfinition de l’opérateur << en fonction amie Exemple (suite)
// de la classe Point
ostream & operator << (ostream & sortie, point & p) {
sortie << "<" << p.x << "," << p.y << ">" ; return sortie ; }
void main()
// Redéfinition de l’opérateur << en fonction amie {
// de la classe Point point b
istream & operator >> (istream & entree, point & p) { cout << "donnez un point : " ;
char c = '\0' ;
int x, y ; bool ok = true ; if (cin >> b)
entree >> c ; // saisie d’un caractère au clavier cout << "Affichage du point : " << b << endl ;
if (c != '<') ok = false ; else
else { entree >> x >> c ; // saisie de x (entier)
// et d’un autre caractère au clavier
cout << "** information incorrecte" << endl ;
if (c != ',') ok = false ; }
else { entree >> y >> c ; // même chose pour y
if (c != '>') ok = false ; }
}
// Si la saisie a été correcte, on affecte à p
if (ok==true) { p.x = x ; p.y = y ; }
// Statut d’erreur du flot géré par un ensemble de bits d’un entier
// clear (activation de bits d’erreur)
// badbit (bit activé quand flot dans un état irrécupérable)
// rdstate () pur activer le bit badbit sans activer les autres
else entree.clear (ios::badbit | entree.rdstate () ) ;
// on retourne le flot d’entrée
return entree ;
} userStreamRedefOperator 36
6
Chapitre 4 : Les classes en C++ A.U. : 2009/2010
ENSI – II2
42 43