Beruflich Dokumente
Kultur Dokumente
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
AP3
cours 1 - 9
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 +
return 0;
}
AP3
cours 1 - 14
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
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
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
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
AP3
cours 1 - 24
AP3
cours 1 - 25
// // // // //
a a a a a
= = = = =
33 14 33 14 7
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.
AP3
cours 1 - 30
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
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
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