Sie sind auf Seite 1von 36

AP3 - C++ Introduction

Objectifs du cours
Apprendre un langage orient objet : C++ Dcouvrir, par la pratique, les notions fondamentales de la Programmation Oriente Objet (POO)

AP3

cours 1 - 2

Pourquoi C++?

AP3

cours 1 - 3

Modalits
~1h30 de Cours/TD ~2h de TP Enseignant : Dr Mohammed Belkhatir
Bureau 2me tage E-mail : mohammed.belkhatir@iut.univ-lyon1.fr

Evaluation :
AP-3 : 1 examen papier, note TP

AP3

cours 1 - 4

C++ Introduction
Conu en 1982 par Bjarne Stroustrup (AT&T Bell Laboratories, le berceau dUnix et C) Objectif : ajouter au langage C le concept de classes tel quil avait t introduit par le langage Simula Intrt : bnficier des avantages de la programmation oriente objet tout en conservant les performances du langage C et ses bibliothques nombreuses et varies

AP3

cours 1 - 5

Enjeux de la programmation
La production dun logiciel, considr comme un processus industriel (et non pas comme un hobby ) doit remplir les critres suivants :
Exactitude (fonctionnement correspondant aux spcifications) Robustesse (vis--vis des conditions anormales) Evolutivit (facilit ajouter de nouvelles fonctionnalits) Gnricit, Rutilisabilit (possibilit de rutiliser des modules dans dautres logiciels) Portabilit (aptitude fonctionner sur diffrentes plateformes) Performances (temps dexcution, ressources consommes)

AP3

cours 1 - 6

Programmation structure
Le langage C, langage impratif, permet une programmation structure, selon lquation de Wirth : Programme = Algorithmes + Structures de Donnes Cette approche a permis daugmenter exactitude et robustesse Mais na pas permis datteindre les objectifs souhaits en termes dvolutivit et de rutilisabilit Origine du problme : le dcouplage entre structures de donnes et traitements qui oblige casser un module ds que lon remet en cause une structure de donnes.
AP3 cours 1 - 7

Apports de la POO : objet


La notion dobjet autorise lencapsulation des donnes et des traitements sur ces donnes Objet = Mthodes + Donnes Impose de manipuler les donnes via les mthodes Consquence : lobjet est uniquement caractris par la spcification de ces mthodes peu importe la structure des donnes On ralise ainsi une abstraction des donnes qui facilit lvolutivit et la rutilisabilit Exemple : un objet collection de donnes qui peut tre implment sous forme de tableau dynamique ou de liste chane, avec des mthodes dajout, de parcours,
AP3 cours 1 - 8

Apports de la POO : classe


La notion de classe dobjets est une gnralisation de la notion de type dj rencontre dans les langages impratifs Classe = description dun ensemble dobjets ayant les mmes structures de donnes et les mmes mthodes Un objet est une instance (une "ralisation") de la classe laquelle il appartient

AP3

cours 1 - 9

Apports de la POO : hritage


Lhritage permet de construire une nouvelle classe partir dune classe dj existante. La nouvelle classe hrite de toutes les proprits de la classe existante et lui en ajoute de nouvelles (on parle de spcialisation) La notion dhritage facilite la rutilisabilit C++ permet lhritage multiple : une nouvelle classe peut hriter de plusieurs classes existantes

AP3

cours 1 - 10

Spcificits de C++
Langage impratif auquel on a ajout des fonctionnalits objet Permet une transition en douceur de la programmation structure vers la programmation objet Nimpose pas une programmation objet pure et dure comme Simula, Smalltalk ou Java

AP3

cours 1 - 11

C++ et normes
C++ peut tre vu comme le langage C ANSI auquel :
On a ajout, mais aussi supprim, quelques contraintes par rapport la norme ANSI On a ajout quelques spcificits non objet On a ajout tout laspect objet

AP3

cours 1 - 12

C++ Cours 1
C++ : les premiers +

Les premiers plus


Dclarations dans les instructions
int { main() // une dclaration int i; // une instruction scanf("%d", &i); // lire i // une nouvelle dclaration int j; scanf("%d", &j);

return 0;
}

AP3

cours 1 - 14

Les premiers plus


Dclaration d'une variable de boucle for
int main() { int tab[7]={0,1,2,3,4,5,6}; for (int i=0; i<7; i++) // i n'est visible que dans l'itration printf("%d ", tab[i]); printf("\n"); return 0; }

Linitialisation des variables scalaires peut tre faite par une expression quelconque

AP3

cours 1 - 15

Variable rfrence
En C, pour accder l'adresse d'une variable, on utilise une variable adresse. En C++, on peut aussi utiliser une variable rfrence
int main() { int i=5,j=6; int &k=i; // k rfrence i, est un alias de i int &n; // incorrect : // il manque la variable rfrence printf("k : %d\n", k); // affiche i cd 5 k=j; // quivalent i=j printf("i : %d\n", i); // affiche 6 return 0; }

AP3

cours 1 - 16

Variable rfrence
Une variable rfrence est une sorte de variable adresse (ou pointeur) :
plus simple utiliser syntaxiquement mais dont la variable rfrence est toujours la mme (on ne peut pas la changer).

AP3

cours 1 - 17

Passage de Paramtre par Rfrence (rsultat ou donne-rsultat)


C++ permet de raliser des passages de paramtres rsultat ou donne-rsultat de manire plus lgante quen C grce la notion de paramtre rfrence. Exemple - considrons la dclaration darticle suivante : struct produit { char nom[30]; float prix; };
AP3 cours 1 - 18

Fonction avec paramtre rfrence :


bool recherche( struct produit tab[], // tableau de produits (donne) int n, // nombre d'lments de tab (donne) char nom_prod[], // nom du produit recherch (donne) struct produit &p ) // p est un paramtre rsultat // p est une rfrence une variable x // recherche si tab contient un produit de nom nom_prod // si oui, range la 1re occurrence dans x et retourne true // si non, retourne false { int i; for (i=0; i<n && strcmp(tab[i].nom, nom_prod)!=0; i++) { // itration vide } if (i<n) // on a trouv : tab[i].nom==nom_prod p=tab[i]; return i<n;
}

Le paramtre p s'utilise comme la variable x quil rfrencera donc on crit p=tab[i]; pour effectuer en fait x=tab[i];

AP3

cours 1 - 19

Exemple d'utilisation de la fonction


int main(){ struct produit tab[10]= { {"aaa", 15}, {"bbb", 12}, {"ccc", 20} }; pas de "&" devant prod !

struct produit prod;

if (recherche(tab, 3, "bbb", prod)) // prod est la variable rfrence par le paramtre p // de la procdure recherche printf("%s %5.2f\n", prod.nom, prod.prix); return 0; }

AP3

cours 1 - 20

En C on aurait crit :
int recherche( struct produit tab[], // tableau de produits int n, // nombre d'lments char nom_prod[], // nom d'un produit struct produit *p// p : adresse d'une variable x { int i; for (i=0; i<n && strcmp(tab[i].nom, nom_prod)!=0; i++) { // itration vide } if (i<n) *p = tab[i]; return i<n; }

L'emploi d'un paramtre rfrence est donc plus simple (les oprateurs * disparaissent)
AP3 cours 1 - 21

En C, on aurait appel la fonction ainsi :


int main () { struct produit tab[10]= { {"aaa", 15}, {"bbb", 12}, {"ccc", 20} };

struct produit prod; if (recherche(tab, 3, "bbb", & prod )) printf("%s %5.2f\n", prod.nom, prod.prix); return 0; }

AP3

cours 1 - 22

En rsum
C C++
void SOMME (int n1, void SOMME (int n1, int n2, int n2, int * resultat) { int & resultat) { *resultat = n1 + n2; resultat = n1 + n2; } } int main() { int res; SOMME(2,3,&res); printf("Rsultat 2+3 = %d\n",res); return 0; } int main() { int res; SOMME(2,3,res); printf("Rsultat 2+3 = %d\n",res); return 0; }

AP3

cours 1 - 23

Valeurs par dfaut de paramtres


Exemples corrects
int f1(int x, int y=4) { return x+y; } // 4 : valeur par dfaut de y

//---------------------------------------------------int f2(int x=3, int y=4) { return x+y; }

AP3

cours 1 - 24

Valeurs par dfaut de paramtres


Exemple incorrect
int f3 (int x=3, int y) // x ayant une valeur par dfaut, // les paramtres suivants // (selon l'ordre de lecture gauche->droite) // devraient aussi avoir une valeur par dfaut {
return x+y; }

AP3

cours 1 - 25

Valeurs par dfaut de paramtres


Exemples d'appels corrects des fonctions f1 et f2 dfinies prcdemment :
int main() { int a; a = f1(10, 23); a = f1(10); a = f2(10, 23); a = f2(10); a = f2(); return 0; }
AP3 cours 1 - 26

// // // // //

a a a a a

= = = = =

33 14 33 14 7

Surcharge de fonctions et de procdures


Plusieurs fonctions peuvent avoir le mme nom, condition qu'elles aient des signatures diffrentes:
soit un nombre diffrent de paramtres soit au moins un paramtre de type diffrent Le type du rsultat ne compte pas pour diffrencier la procdure (3) et la fonction (4)
void p(int i); void p(float i); // procdure (1) // procdure (2) // paramtre de type # (1) // procdure (3) // nombre de paramtres # (1) // fonction (4) // incorrect, 2 paramtres // de mme type que (3)
AP3 cours 1 - 27

void p(int i, int j);

int p(int i, int j);

AP3 - C++ Entres/Sorties

Lecture et criture sur le terminal


En C : bibliothque stdio, utilisable en C++ En C++ : bibliothque iostream, oriente objets (description fournie plus tard) Iostream fournit 2 objets particuliers :
cout pour crire sur l'cran du terminal, cin pour lire sur le clavier du terminal.

AP3

cours 1 - 29

Objet stream
cin et cout sont des objets de la classe stream Un stream est un objet :
qui reprsente un support d'informations sur lequel on peut lire ou bien crire ou bien lire et crire. qui possde toutes les mthodes pour lire ou crire sur ce support.

Un support d'informations peut tre:


l'cran ou le clavier d'un terminal , un fichier une zone de mmoire (chane de caractres).

Le mot stream peut tre traduit par flot (flux) de donnes.

AP3

cours 1 - 30

Exemple d'utilisation de cout : mthode (oprateur) <<


#include <iostream> using namespace std; int main() { int code char num_tel[] float prix

= 147; = "0472284528"; = 12.5;

cout << code << num_tel << prix << endl; }

L'oprateur << envoie une valeur de type prdfini (int, short, float, char) sur un stream d'criture L'oprateur endl dsigne une fin de ligne

AP3

cours 1 - 31

Exemple d'utilisation de cin Mthode (oprateur) >>


#include <iostream> using namespace std; int main() { int char float

code; num_tel[11]; prix;

cin >> code >> num_tel >> prix; }

L'oprateur >> extrait (lit) une valeur de type prdfini (int, short, float, char) d'un stream de lecture.
AP3 cours 1 - 32

Manipulateurs
Fonctions ou oprateurs qui permettent de modifier le statut d'un stream, par exemple le format et la base de lecture ou d'criture. Le statut dun stream est dfini par un mot dtat (une suite de bits). Ce mot est dcoup en plusieurs champs, chaque champ tant compos dun certain nombre de bits. Les manipulateurs permettent de modifier ces bits en utilisant la syntaxe dune entre ou dune sortie, cest--dire en utilisant les oprateurs >> ou <<
AP3 cours 1 - 33

Exemple : manipulateurs en sortie


#include <iostream> #include <iomanip> using namespace std; // indispensable depuis la norme ANSI ISO int main() { // en commentaire, le rsultat produit cout << setprecision(3) << 110.55555 << endl; // 110.556 cout << scientific << 110.5 << endl; // 1.105e+02 cout << setw(10) << fixed << setfill((int)'-') << 110.5 << endl; // -----110.5 cout << setfill((int)'*') << "abc" << endl; // *******abc return 0; }

AP3

cours 1 - 34

Exercice
Ecrire un programme qui :
lit une suite de 10 notes (des rels) au clavier et les range dans un vecteur Appelle une procdure qui reoit en paramtre donne le vecteur et calcule la moyenne de ce vecteur qui est renvoye via un paramtre rfrence affiche la moyenne calcule en point fixe avec 2 dcimales sur un gabarit de 8 caractres

AP3

cours 1 - 35

#include <iostream> #include <iomanip> using namespace std; void moyenne ( const float v[], float & m) m = 0.0; for (int i=0; i< 10; i++) m += v[i]; m = m / 10.0; } {

Solution

int main() { float vect[10], moy; for (int i=0; i<10; i++) { cout << "Entrez la note n " << setw(2) << i << " : "; cin >> vect[i]; } moyenne(vect,moy); cout << "La moyenne est de " << fixed << setw(8) << setprecision(2) << moy << endl; return 0; }

AP3

cours 1 - 36

Das könnte Ihnen auch gefallen