Introduction au langage C++ : C avec des classes
Declaration d’une classe
// Fichier: date.h
class CDate {
public:
// Pour changer la date.
void Change(int jour, int mois, annee);
// Lecture de la date.
int Jour() const; // Note: const
int Mois() const;
int Annee() const;
- Passe a la date suivante.
voidSuivante();
- Ecrit la date dans un fichier.
voidEcrit(FILE*);
private:
int jour, mois, annee;
};
Les classes se manipulent a peu pres comme les struct:
struct S {
/* … */
};
class CDate {
/* … */
};
void main()
{
S s;
FILE* fichier;
Cdate date; // « instance » (objet) appartenant // a la classe CDate.
}
Implementation
On utilise la notation
Nom de la Classe::Fonction Membre
pour de nir une fonction d’une classe.
Les variables declarees dans une classe donnee sont accessible dans la de nition des fonc-tions membres de la classe.
// Exemple:
void CDate::Ecrit(FILE* f)
{
printf(f, « %d %d %d » , jour, mois annee);
}
- Fichier: date.cpp
- Cette fonction change la date. CDate::Change(int nouv_jour,
int nouv_mois,
int nouv_annee)
{
jour = nouv_jour;
mois = nouv_mois;
annee = nouv_annee;
}
// Jour courant.
int CDate::Jour() const
{
return jour;
}
Exemple d’utilisation
void main()
{
CDate date;
date.Change(3, 1, 2000); // Y2K proof!
date.Suivante();
date.Ecrit(stdout);
date.jour = 4; // Illegal!
// Le compilateur va
// se plaindre…
int jour = date.Jour();
}
Constructeurs
Dans le programme precedent,
CDate date;
date.Change(3, 1, 2000);
c’est un peut long, on peut faire mieux avec un constructeur: c’est une fonction mem-bre speciale qui construit un objet a partir de valeurs initiales.
Syntaxe:
- Dans date.h class CDate { public:
CDate();
CDate(int jour, int mois, int annee); /* … */
};
- Dans date.cpp,
- on definit deux fonctions:
CDate::CDate() :
jour(0), mois(0), annee(0)
{
}
CDate::CDate(int p_jour,
int p_mois,
int p_annee) :
jour(p_jour), mois(p_mois), annee(p_annee)
{
}
// Utilisation (dans main()):
CDate date1;
CDate date2(25,12,1999);
Destructeurs
Sert a faire le « menage » lorsqu’un objet cesse d’exister…
Par convention, cette fonction porte le nom de la classe pre x du caractere~
Usuellement, si une allocation de memoire a et e ectuee dans un constructeur, on libere la memoire dans le destructeur.