0% ont trouvé ce document utile (0 vote)
28 vues15 pages

C++ Chapi

Le document présente les particularités du langage C++ par rapport au C, notamment les nouvelles formes de commentaires, la gestion dynamique de la mémoire, et la notion de références. Il aborde également les fonctions d'entrées/sorties, les conversions de type, et la surdéfinition des fonctions. Enfin, il explique l'utilisation des opérateurs new et delete pour la gestion dynamique de la mémoire ainsi que la transmission par référence.

Transféré par

oumaima oumennana
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 PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
28 vues15 pages

C++ Chapi

Le document présente les particularités du langage C++ par rapport au C, notamment les nouvelles formes de commentaires, la gestion dynamique de la mémoire, et la notion de références. Il aborde également les fonctions d'entrées/sorties, les conversions de type, et la surdéfinition des fonctions. Enfin, il explique l'utilisation des opérateurs new et delete pour la gestion dynamique de la mémoire ainsi que la transmission par référence.

Transféré par

oumaima oumennana
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 PDF, TXT ou lisez en ligne sur Scribd

Programmation en Langage C++

Mohamed EL HADDAD
Département
Systèmes d'Information et de Communication

1
Particularités du C++ par rapport à C
C++ présente par rapport au C ANSI, des extensions qui ne sont
pas véritablement orientées objets.
En voici un bref résumé:

 Nouvelle forme de commentaire


 Plus grande liberté dans l'emplacement des déclarations
 Notion de référence ( Transmission d'arguments par adresse )
 Surdéfinition des fonctions
 Nouveaux opérateurs de gestion dynamique de la mémoire
 Les fonctions " en ligne " (inline )

2
Commentaires
En C++, les commentaires s'écrivent derrière un // et se terminent avec la fin
de la ligne
Déclaration des variables
En C++, on peut déclarer les variables locales si besoin il y a. Si cette variable est
déclarée au début d'un bloc, sa portée est limitée à ce bloc.
Exemple:
int main()
{
for (int i=5; i<=0;i--) // i est connue de toute la fonction main
{
int j; // j n'est connue que du bloc
……;
}
}
Fonctions d'entrées/ Sorties
En C++, on peut utiliser toutes les fonctions d'entrées/sorties du C ( printf, puts,
scanf, …) sans oublier d'inclure le fichier d'en tête " stdio.h"

D'autres possibilités existent en C++, à condition de déclarer le fichier d'en tête "
iostream.h ".
Pas nécessaire de spécifier des formats.

 L'affichage à l'écran se fait à l'aide de l'opérateur cout


 La saisie se fait grâce à l'opérateur cin 3
Exemple:
#include <conio.h>
void main()
{int n=25;
char *tc = "On essaie cout !";
float x = 3.1456;
cout<<"Salut tt le monde \n";
cout<< tc <<"\n";
cout<<" Salut tt le monde \n"<<tc<<"\n";
cout<<"n= "<<n<<" x= "<<x<<"\n";
cout<<"Saisir un entier: ";
cin >> n; // équivalent à scanf("%d",&n);
cout << " n= "<<n;
int a, b;
cin >> a >> b; // saisie de 2 entiers séparés par un Retour Chariot
cout << " a= " <<a << "b= "<<b;
}

Remarque: Les notations ci-dessus seront justifiées prochainement


Conversions de type

 Le langage C++ autorise les conversions de type entre variables de type char, int,
float, double.

 Une conversion de type float  int ou char est dite dégradante

 Une conversion de type int ou char  float est dite non dégradante
4
Conversions de type lors d'appel à fonction

 Le C++, contrairement au C, autorise dans une certaine mesure, le non


respect du type des arguments lors d'un appel à fonction.

 Le compilateur opère alors une conversion de type.

Exemple:
double fct( int x, float y)
{
Corps de la fonction
}
void main() {
char ch;
int i,j;
float r;
double a,b,c,d;
a=fct(i,r); // appel standard
b=fct(ch,r); // appel correct, ch est converti en int
c=fct(i,j); // appel correct, j est converti en float
d=fct(r,j); // appel correct, r est converti en int et j en float
}
5
Les arguments par défaut

En C, il est indispensable que l'appel d'une fonction


contienne autant d'arguments que la fonction en attend
effectivement.

 C++ permet de s'affranchir en partie de cette règle.


En C++, on peut préciser la valeur prise par défaut par un
argument de fonction. Lors de l'appel à cette fonction,

 si on oublie l'argument, il fait comme si l'appel avait


été effectué avec cette valeur, dans le cas contraire,
celle si est ignorée.

6
Les arguments dont la valeur est fournie par défaut doivent se situer en
fin de liste. Situation interdite

int fct(int n=2, float m, double x=2.5)


Exemple:
#include<iostream.h>
void main(){
int n=10, p=20;
void f(int , int=12); // prototype avec une valeur par défaut
void g(int=0 , int=12); // prototype avec deux valeurs par défaut
f(n,p); // appel normal
f(n); // appel avec un seul argument
// f() serait, ici, rejeté
g(n,p); // appel normal
g(n); // appel avec un seul argument
g(); // appel sans argument autorisé, ici
}
voif f(int a, int b) //en tête habituelle
{
……………….
}
voif g(int a, int b)
{
……………….
}
Exercice:
Ecrire la fonction puissance, par défaut, la fonction devra fournir x3
7
Surdéfinition de fonctions

Surdéfinition : Un même symbole qui possède plusieurs


significations différentes, le choix de l'une de
significations se faisant en fonction du contexte.

L'un des atouts de C++ est de permettre la surdéfintion


de la plupart des opérateurs (A voir plus tard).

C++ autorise la définition de fonctions différentes et


portant le même nom. Le choix de la bonne fonction est
basé sur le type des arguments.

8
Exemple:
#include <iostream.h>
void test(int n = 0,float x = 2.5) {
cout <<"Fonction N°1 : ";
cout << "n= "<<n<<" x="<<x<<"\n";
}
void test(float x = 4.1,int n = 2) {
cout <<"Fonction N°2 : ";
cout << "n= "<<n<<" x="<<x<<"\n";
}
int main() {
int i ; float r ;
Cout << "saisir un réel " ; cin >> r ;
Cout << "saisir un entier "; cin >> i ;
test(i,r); // fonction N°1
test(r,i); // fonction N°2
test(i); // fonction N°1
test(r); // fonction N°2
return 0;}
Remarque:
Les appels suivants, ambigus, sont rejetés par le compilateur
test() test (i,i) et test (r,r)
9
Exercice:

Ecrire une fonction void affiche(float x, int n=0) qui affiche xn.

Ecrire une autre fonction void affiche(int n, float x=0) qui affiche
xn .

Les mettre en œuvre dans le programme principal, en utilisant la


propriété de surdéfinition.

Remarque:
Cet exemple conduit à une erreur de compilation lors d'appel de type
mn avec m et n entiers.

10
Opérateurs new et delete
En C, la gestion dynamique de mémoire se fait à l'aide des fonctions malloc et
free . Dans la P.O.O, C++ a introduit deux nouveaux opérateurs new et delete
adaptés à la gestion dynamique d'objets ( notion d'objet à voir plus tard).

Syntaxe de new :
new type où type est un type quelconque
new type[n] alloue l'emplacement nécessaire pour n (entier) éléments du
type indiqué

Syntaxe de delete : delete adresse

Exemple:
int *pentier ; // déclaration d'un pointeur sur un entier
pentier = new int ; // allocation de place en mémoire pour un entier
delete pentier ; // libération de la mémoire
Aussi on peut déclarer ainsi: int *pentier = new int ;
char *pch ;
pch = new char[50] ; // réservation de place en mémoire pour 50 "char "
delete pch ; // libération de la mémoire
Ou encore char *pch = new char[50] ;
11
Notion de référence
En C, la notation &n signifie " adresse de la variable n «

En C++, cette notation possède deux significations :


Il peut toujours s'agir de l'adresse de la variable n
Il peut aussi s'agir de la référence à n

Seul le contexte du programme permet de déterminer s'il


s'agit de l'une ou l'autre des deux significations.
Son principal intérêt est qu'elle permet de laisser le
compilateur mettre en œuvre les " bonnes instructions "
permettant d'assurer effectivement un transfert par
adresse.
Exemple :
int n ;
int &p = n ; // p est une référence à n
// p occupe le même emplacement mémoire que n
n=4 ;
12
Transmission par référence en C++
En C, comme en C++, un sous programme ne peut modifier la valeur d'une
variable locale passée en argument de fonction. Pour se faire en C, il faut
passer l'adresse la variable ( Notion de pointeur ).

C++ permet de demander au compilateur de prendre lui même en charge la


transmission des arguments par adresse: On parle en général, dans ce cas,
de transmission par référence.

Exemple 1 :
Passage par valeur ( L’échange n’aura pas lieu )
#include <iostream.h>
#include <conio.h>
void echange(int a,int b) {
int aux;
aux = b; b = a; a = aux;
cout<<"Pendant l'échange: a = "<<a<<" b = "<<b<<"\n"; }
void main() {
int u=5,v=3;
cout<<"Avant echange: u = "<<u<<" v = "<<v<<"\n";
echange(u,v);
cout<<"Apres echange: u = "<<u<<" v = "<<v<<"\n";
getch() ;
} 13
Exemple 2 :
Passage par adresse ( L’échange aura lieu)
#include <iostream.h>
#include <conio.h>
void echange(int *a,int *b)
{
int aux; aux = *b; *b = *a; *a = aux;
cout<<"Pendant l'échange: a = "<<*a<<" b = "<<*b<<"\n";
}
void main()
{
int u=5,v=3;
cout<<"Avant echange: u = "<<u<<" v = "<<v<<"\n";
echange(&u,&v);
cout<<"Apres echange: u = "<<u<<" v = "<<v<<"\n";
getch() ;
}

14
Exemple 2 :
En C++, on préférera le passage par référence
#include <iostream.h>
#include <conio.h>
void echange(int &a,int &b) // référence à a et b
{
int aux; aux = b; b = a; a = aux;
cout<<"Pendant l'échange: a = "<<a<<" b = "<<b<<"\n";
}
void main()
{ int u=5,v=3;
cout<<"Avant echange: u = "<<u<<" v = "<<v<<"\n";
echange(u,v);
cout<<"Apres echange: u = "<<u<<" v = "<<v<<"\n";
getch() ;}

L’échange a lieu. Le compilateur prend en charge le passage par adresse si


celui-ci est nécessaire.
Remarquer la simplification de l’écriture de la fonction.

15

Vous aimerez peut-être aussi