Travaux Pratiques
Données et fonctions membres statiques-Passage par référence-Auto référence
TP2 Données et fonctions membres statiques-Ref-
this.doc
1ère année Page:1/4 http://robert.cireddu.free.fr/SNIR/
http://robert.cireddu.free.fr/SNIR/
Extrait du référentiel : BTS Systèmes Numériques option A (Informatique et Réseaux) Niveau(x) S4. Développement logiciel
S4.6. Programmation orientée objet (Support : C++)
S4.7. Langages de programmation
Du C au C++ : références, entrées/sorties (iostream, fstream),
polymorphisme, etc.
Définition de classes (encapsulation) et modèle canonique (dit de Coplien) C++
3 3 2 3
http://robert.cireddu.free.fr/SNIR/
Objectifs du TP :
- Membres statiques : - donnée membre - fonction membre - Transmission d’objet :
- passage par référence - auto-référence
Support d’activité :
- Logiciels : Visual Studio et suite bureautique - Fichier : Transmission d’objets.PDF
- Ce document au format PDF
Vous rédigerez un compte-rendu numérique.
Pensez aux captures d’écran pour imager votre compte-rendu.
Sauvegardez votre travail régulièrement !
Des modifications peuvent exister selon la version du logiciel utilisée.
Travaux Pratiques
Données et fonctions membres statiques-Passage par référence-Auto référence
TP2 Données et fonctions membres statiques-Ref-
this.doc
1ère année Page:2/4
Question 1
Lisez attentivement le document « Transmission d’objets.pdf » se trouvant dans le dossier
« Support » de l’activité.
MEMBRES STATIQUES
DONNÉE MEMBRE
Soit le code source ci-dessous :
#include <iostream>
using namespace std;
class CPoint {
private:
int x, y;
static int nbre_point; // membre donnée statique public:
CPoint(int, int);
~CPoint();
void affiche();
};
int CPoint::nbre_point = 0; // initialisation du membre donnée statique CPoint::CPoint(int abs, int ord)
{
cout << "Le constructeur de point" << endl;
x = abs;
y = ord;
++nbre_point;
}
CPoint::~CPoint() {
cout << "Le destructeur de point" << endl;
--nbre_point;
}
void CPoint::affiche() {
cout << " ++ Il y a maintenant " << nbre_point << " point(s)\n";
}
int main() {
CPoint a(3, 7);
a.affiche();
CPoint b(2, 8);
b.affiche();
return 0;
}
Travaux Pratiques
Données et fonctions membres statiques-Passage par référence-Auto référence
TP2 Données et fonctions membres statiques-Ref-
this.doc
1ère année Page:3/4
Question 2
Analysez le code source ci-dessus.
Saisissez le code ci-dessus sous Visual Studio en créant un projet (avec modularité) nommé « DonneeStatique.sln ».
Compilez puis exécutez le programme en mode débogage (pas à pas).
Ouvrez une fenêtre de suivi des variables locales.
Ouvrez une fenêtre « Espion1 » pour y placer l’adresse du membre donnée statique
« nbre_point ».
Si vous n’y arrivez pas, ajoutez à la fin de la définition du constructeur cette ligne de code : cout << &nbre_point << endl ;
Observez la sortie écran obtenue (la console).
Complétez le tableau ci-dessous :
Occupation mémoire (en octets) de l’objet
Adresse mémoire du membre donnée statique « nbre_point »
Commentaires
Objet « a » Objet « b »
Un membre « donnée » (attribut) déclaré avec le mot clé static est partagé par tous les objets de la même classe. Il existe même si aucun objet de cette classe n’a été créé. Un membre « donnée » (attribut) statique doit être initialisé explicitement, à l’extérieur de la classe (même s’il est privé), en utilisant l’opérateur de résolution de portée (::) pour spécifier sa classe.
FONCTION MEMBRE
Question 3Saisissez le code se trouvant dans le fichier de préparation du TP (page 4 sur 7) sous Visual Studio en créant un projet (avec modularité) nommé « FonctionStatique.sln ».
Compilez puis testez l’application.
Que constatez-vous ?
Lorsqu’une fonction membre a une action indépendante d’un quelconque objet de sa classe, on peut la déclarer avec le mot clé static. Dans ce cas, une telle fonction peut être appelée, sans mentionner d’objet particulier, en préfixant simplement son nom du nom de la classe concernée, suivi de l’opérateur de résolution de portée (::).
Les fonctions membres statiques (méthodes) ont les particularités suivantes :
- elles ne peuvent pas accéder aux attributs de la classe car il est possible qu’aucun objet de cette classe n’ait été créé.
- elles peuvent accéder aux membres données statiques car ceux-ci existent même lorsque aucun objet de cette classe n’a été créé.
Travaux Pratiques
Données et fonctions membres statiques-Passage par référence-Auto référence
TP2 Données et fonctions membres statiques-Ref-
this.doc
1ère année Page:4/4
TRANSMISSION D’OBJETS
PASSAGE PAR RÉFÉRENCE
Question 4Saisissez le code (du passage par référence uniquement) fournit dans le fichier de
préparation du TP (page 6 sur 7) en créant un projet nommé « Reference.sln » sous Visual Studio.
Compilez puis corrigez l’erreur attendue.
Une fois la compilation réussie, exécutez le programme en mode débogage (pas à pas).
Ouvrez une fenêtre « Espion1 » pour y placer l’adresse des variables n, p, a et b. Relevez les adresses des variables.
Que constatez-vous ?
AUTO-RÉFÉRENCE
Vous allez reprendre le programme source déjà exploité dans le TP1 C++ précédent.
Question 5
Récupérez et faîtes une copie du projet « Bateau.sln »
Enregistrez votre nouveau projet sous « AutoReference.sln »
Modifiez le code afin de faire apparaître à l’aide du mot clé « this » l’adresse des objets construits puis détruits.
Compilez puis exécutez votre programme sans débogage.
Faites une copie d’écran de la sortie console.
Que constatez-vous ?
L’objectif étant de déterminer quel objet sera construit ou détruit en premier ou en second.