IFT1166 --- Hiver 2K --- Demo04 --- 02 Fevrier 2K IFT1166 -- Demonstration # 4 Contenu - reprise de l'exercice 4 de la demonstration -3- - des questions sur le TP01? - quelques astuces de programmation. - les membres statiques - les fonctions membres - l'autoreference THIS - constructeurs, destructeurs, constructeurs de recopie Exercice 1 Ce programme est-il syntaxiquement correct (cad peut-il etre compile) ? Dans la negative, corrigez-le. ------------------------------------------------------ #include class partage { int a; static int b=100; public : static int c0; static void init(int i, int j,int k) { a=i; b=j; c=k; } void afficher(); }; void partage:afficher() { cout << "la variable statique a : " << a << endl; cout << "la variable b : " << b << endl; cout << "la variable statique c : " << c << endl; } int main(void) { partage x,y; x.init(1,1); x.afficher(); y.init(2,2); y.afficher(); x.afficher(); partage::c++; partage::a++; cout << "la variable statique c vaut: " << partage::c << endl; cout << "la variable statique a vaut: " << partage::a << endl; return 0; } ------------------------------------------------------ Exercice 2 Ecrire le programme suivant: Soit la classe livres ayant : Deux membres prives : auteur (du livre) et nom (du livre); Un constructeur pour initialiser les membres prives, a titre d'exemple par: Auteur : Albert Camus & Arthur Koestler Nom: reflexions sur la peine capitale Un destructeur; Deux fonctions membres publiques, la premiere permet d'afficher en sortie les membres prives, la seconde affiche ces meme membre mais cette fois en utilisant le pointeur autoreference THIS. Exercice 3 Ecrivez une classe nommee pile_entier permettant de gerer une pile d'entiers. Ces derniers seront conserves dans un tableau d'entiers alloues dynamiquement. La classe comportera les fonctions membres suivantes: pile_entier (int n) Constructeur allouant dynamiquement un emplacement de n entiers, pile_entier () Constructeur sans argument allouent par defaut un emplacement de vingt entiers, ~pile_entier () Destructeur, void empile (int p) Ajouter l'entier p sur la pile, int depile () Fournit la valeur de l'entier situe en haut de la pile, en le supprimant de la pile, int pleine () Fournit 1, si la pile est pleine, 0 sinon, int vide () Fournit 1 si la pile est vide, 0 sinon, Ecrivez une fonction main, utilisant des objets automatiques et dynamiques du type pile_entier defini precedemment. Mettez en evidence les problemes poses par des declarations de la forme: pile_entier a(10); pile_entier b = a; Ajouter a la classe pile_entier le constructeur de recopie permettant de regler les problemes precedents. Exercice 4 Quel sera le resultat du programme suivant. ------------------------------------------------------------ #include class compte { float solde; int nip; static int nb; public: ~compte () { cout << "D "<< nb << endl; nb--; } compte (float m, int n) { nb++; solde = m; nip =n; cout << "C "<< nb << endl; } compte (const compte& autre){ nb++; solde = autre.solde; nip = autre.nip; cout << "R " << nb << endl; } }; int compte::nb = 0; void p_val(compte c) { cout << "p_val" << endl;} void p_ref(compte& c) { cout << "p_ref" << endl;} int main() { compte c1(100, 111); compte c2(200, 222); compte c3 = c2; compte c4(c1); c3 = c2; p_ref(c1); p_val(c1); compte* pc = new compte(800, 333); delete pc; compte* pc2 = new compte(c1); delete pc2; compte banque[3] = {c1, c2, c3}; return 0; } ------------------------------------------------------------