0% ont trouvé ce document utile (0 vote)
26 vues17 pages

C++Compte Rendu

Ce document présente un compte rendu de travaux pratiques sur C++ et la programmation orientée objet, abordant des concepts tels que la transmission par valeur, adresse et référence. Il inclut des exercices pratiques sur les entrées-sorties, les instructions de contrôle, ainsi que des notions de classes, objets et constructeurs. Le document souligne l'importance de la visibilité des méthodes dans les classes pour permettre un accès approprié aux fonctionnalités.

Transféré par

rba05525
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
26 vues17 pages

C++Compte Rendu

Ce document présente un compte rendu de travaux pratiques sur C++ et la programmation orientée objet, abordant des concepts tels que la transmission par valeur, adresse et référence. Il inclut des exercices pratiques sur les entrées-sorties, les instructions de contrôle, ainsi que des notions de classes, objets et constructeurs. Le document souligne l'importance de la visibilité des méthodes dans les classes pour permettre un accès approprié aux fonctionnalités.

Transféré par

rba05525
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd

Compte Rendu

TP
C++ et programmation
orientée objet

Hiba ELBouaichi
GEE1
Contents:
Tableau de matière: ………………………………………………………………………….…..…1
Transmission par valeur:.......................................................................................................2
Transmission par adresse:....................................................................................................3
Transmission par référence :.................................................................................................4
TP I. Les entrées_sorties : ....................................................................................................5
Exercice 1: somme et produit................................................................................................5
Les instructions de contrôles en C+
+ :.................................................................................6
Exercice 1 :solution d’equation............................................................................................6
TP 4 .Classes et Objets : .......................................................................................................
Exercice 1 : .............................................................................................................................7
Notion de constructeur : ……..………….…………………………………………….…………..7
Constructeur de copie ……………………….……………………………………………..…….12

1|Page
Transmission par valeur:

#include <iostream>
using namespace std;
void echange(int a, int b)
{
int c;
cout << "debut echange:" <<a<<" "<< b << endl;
c=a;
a=b;
b=c;
cout<<"fin echange:"<<a<<" "<<b<<endl;
}
int main()
{
int n=10,p=20;
cout << "avant appel:" <<n<<" "<<p<< endl;
echange(n,p);
cout << "apres appel:" <<n<<" "<<p<< endl;
}

Quand un paramètre est transmis à une fonction, sa valeur est copiée dans une
variable locale. Cette variable est ensuite utilisée pour effectuer les calculs dans la
fonction appelée

2|Page
Transmission par adresse:

#include<iostream>
using namespace std;

void echange (int *a, int *b)


{ int c:
cout << "debut echange"<<*a<<" "<< <<*b<< endl;
c=*a:
* a = *b;
* b = c;
cout << "fin echange: " << *a <<" "<<*b << endl;
}
main ()
{
int n = 10 ,p = 20;
cout << "avant appel:"<<n<<" "<< p << endl;
echange (&n, &p);
cout << "apres appel"<<n<<""<< p << endl;
}

En C, la transmission par adresse utilise des pointeurs pour permettre à la

fonction d'accéder directement à l'adresse mémoire de l'argument.

3|Page
Transmission par référence :

#include<iostream>
using namespace std;

void echange (int& a,int& b)


{
int c;
cout << "debut echange"<<a<<""<< b << endl;
c = a;
a = b;
b = c;
cout << "fin echange: " << a << " " <<b<<endl;
}
main ()
{
int n = 10 ,p = 20 ;
cout << "avant appel: " << n << " " << p << endl;
echange (n, p);
cout << "apres appel: " << n << " " << p << endl;

La transmission d'un objet par référence permet à la fonction de le modifier

directement, sans en créer une copie dans son propre espace mémoire.

4|Page
Les entrées et sorties :

Exercice 1 : « Somme et Produit»

5|Page
Les instructions de contrôles en C++ :

Exercice 1 : « Résolution d’équation»

#include<iostream>
#include<Cmath>
using namespace std;
int main()
{
float a,b,c,delta,x1,x2;
cout << "Entrer les a,b et c "<<endl;
cin>>a>>b>>c;
delta=b*b_4*a*c ;
if(delta>0)
{
X1=(-b+sqrt(delta))/2*a ;
X2=(-b-sqrt(delta))/2*a ;
cout << "Les solutions sont: " << x1,x2 << endl;
}
Return 0 ;
}

6|Page
TP4 : Classes et Objets :
Notion de constructeur :
Exercice 1 :

1)

2)Compilation :

Le problème de ce code est que les méthodes initialise(int, …) et affiche() sont

déclarées comme privées dans la classe Point, ce qui empêche leur appel direct

depuis main().

7|Page
8|Page
Apres modification :

Compilation :

Le problème principal était une tentative d'affectation entre objets alors que les

membres étaient private. La solution consiste à ajouter une méthode spécifique pour

copier les valeurs d’un point à un autre.

9|Page
Problème initial

Dans le premier code, les attributs x et y étaient privés (private) par défaut. Cela

empêche main() d’accéder directement à ces valeurs, et rend aussi l’affectation

point1 = point2; invalide car la classe ne fournit pas d’opérateur d’affectation

personnalisé.

Pourquoi public est important ici ?

En mettant les méthodes en public, on permet :

 D'initialiser les valeurs via [Link](3,4);.

 D'afficher les valeurs via [Link]();.

 De copier un point dans un autre via [Link](point2);.

Conclusion : public est essentiel pour exposer des fonctionnalités contrôlées tout en

protégeant les données internes de la classe.

10 | P a g e
TP5 :Constructeurs et Destructeurs :

Exercice 1 :

Création d’une Classe Point :

Fichier head

Fichier source

11 | P a g e
1. Explication des fichiers générés par Code::Blocks

Quand on crée une classe avec Code::Blocks, deux fichiers sont automatiquement générés :

 Point.h (fichier d’en-tête) : il contient la déclaration de la classe.

 [Link] (fichier source) : il regroupe l’implémentation des méthodes de la classe,

sans inclure la fonction main().

👉 Cette séparation améliore l’organisation du code et simplifie sa maintenance.

Classe :

12 | P a g e
Constructeur de copie :

13 | P a g e
Programme A :

 Pourquoi le constructeur de copie intervient ici ?

Lorsque l’on écrit PointNomme *b = a;, on ne copie pas réellement l’objet,


mais uniquement l’adresse mémoire de l’objet pointé par a. Ainsi, a et b
font référence à la même zone mémoire.

Dans ce cas, le constructeur de copie par défaut de C++ copie simplement l'adresse du
pointeur label au lieu de dupliquer son contenu.

14 | P a g e
Programme B :

Dans le programme B, un constructeur de copie explicite a été ajouté. Ainsi,


lorsqu’un objet PointNomme est copié, une nouvelle zone mémoire est attribuée
pour le champ label, et le contenu de la chaîne est dupliqué au lieu de
simplement copier l’adresse du pointeur.

 Différence avec le programme précédent

Dans le programme sans constructeur de copie explicite, b et a partageaient la


même adresse mémoire pour label. Ainsi, toute modification de label sur l’un
impactait également l’autre.

15 | P a g e
16 | P a g e

Vous aimerez peut-être aussi