C++ 5ème cours Patrick Reuter maître de conférences

Slides:



Advertisements
Présentations similaires
La programmation orientée objet avec Java L3-MIAGE Plan
Advertisements

PHP5 its a kind of magic. Chargement automatique function __autoload( $nom_classe ) { require_once('obj/'.$nom_classe.'.class.php'); } si on exécute le.
Erratum C Surcharge For(int x=0; … 2.
Programmation Orienté Objet en C++
Cours n° 7 Standard Template Library II.
Patrick Reuter maître de conférences
C++ 6ème cours Patrick Reuter maître de conférences
1 Quelques précisions sur l'héritage. 2 Signification de super.f() appel à la méthode f() masquée super : désigne l'objet appelant comme s'il était de.
SI3 MAM3 Hydro Nathan Cohen Igor Litovsky Christophe Papazian
1 Tableaux des objets C++ si on connaît le nombre dobjets nécessaires davance on peut utiliser des tableau dobjets dans les fonctions dusage class Personne.
C.
PHP5 its a kind of magic. Chargement automatique function __autoload( $nom_classe ) { require_once('obj/'.$nom_classe.'.class.php'); } si on exécute le.
Programmation Orientée Objet (POO)
Bases de données Objet singleton pour la connexion
Les entrées /sorties en Java François Bonneville
Chapitre IV Object, interfaces, classes imbriquées.
Programmation orientée objet
Athapascan-1 Interface C++ de programmation parallèle
JavaBeans Réalise par: EL KHADRAOUY TARIK AOUTIL SAFOWAN.
Chapitre VIII Structures dobjets. Chapitre VIII - Structures d'objets2 Structures d objets Il existe plusieurs relations entre les classes. Lhéritage.
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
C++ : classes Introduction aux Langages Orientés Objets
Les Classes les structures en C (struct) regroupent des variables : structuration de l'analyse mais problèmes de cohérence problèmes de sécurité d'accès.
Historique de SystemC Regroupe 4 courants didées: SCENIC Project : Synopsys+UC Irvine Philips System-Level Data Types, VSIA SLD DWG IMEC, Hardware-Software.
Leçon 2 : Surcharge des opérateurs IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
Structures de données IFT-2000
GPA789 Analyse et conception orientées objet 1 Professeur: Tony Wong, Ph.D., ing. Chapitre 6 Correspondance UML et C++
1 PROTOTYPE PGC++ Vecteur_3D DÉFINITION. 2 class Vecteur_3D { private : float vx, vy, vz, vw; // Représentation en coordonnées homogènes. public : Vecteur_3D();
Faculté I&C, Claude Petitpierre, André Maurer 1 Concepts dhéritage Héritage dimplémentation hasA Héritage de spécialisation isA.
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
Types de données abstrait et mécanismes d'encapsulation
Cours 11 Threads. Chapitre X threads threadPOO-L3 H. Fauconnier3 Threads threads: plusieurs activités qui coexistent et partagent des données exemples:
Les pointeurs en C. valeur : main () { float valeur; void* pointeur; }
1 Fonction : surcharge de sélection La surcharge de sélection consiste à implanter plusieurs méthodes de même nom dans une même classe à condition que.
Héritage Lhéritage permet de spécialiser une classe en définissant une relation de type « est une sorte de ». #include comptebancaire.h class CompteEpargne.
C++ : fonctions et opérateurs
CSI2520 Le langage Scheme (2) Un langage de programmation fonctionnelle.
Leçon 1 : notion dobjet IUP Génie Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
INF1101 Algorithmes et structures de données
Structures de données IFT-2000
Masters IIGLI et IGLII – Programmation générique et conception objet – – Claude Montacié 1 Cours n° 3 Polymorphisme I.
Les classes et les objets
2.1 - Historique Chapitre 2 : Introduction au langage C++
9ième Classe (Mardi, 4 novembre) CSI2572. H Nous avons vu comment utiliser les directives #define #ifndef #endif Pour s’assurer de l’inclusion unique.
La notion de type revisitée en POO
ESA Ecole Supérieure des Affaires Ernaelsten Gérard - Frédéric FiléePage 285 Cours de Programmation Web : PHP Chapitre 5 : Orienté objet en PHP.
11/04/ L'héritage Cours 7 Cours 7.
Programmation objet La base.
7ième Classe (Mardi, 24 novembre) CSI2572. Devoir 3 ?
Les modules. Modules Un module est un ensemble de définitions de constantes, de variables et de fonctions réutilisables de projet en projet. Le langage.
1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée.
Cours C++ Fonctions Surcharge d’opérateurs Passage d’arguments
Tutorat en bio-informatique
5ième Classe (Mercredi, 19 octobre) Prog CSI2572.
PHP 7° PARTIE : PROGRAMMATION OBJET
C++ L’HERITAGE Fayçal BRAÏKI DUT INFORMATIQUE.
Les opérateurs L’amitié Les opérateurs Introduction
Les surcharges d'opérateurs
1 Deuxième journée La programmation procédurale. 2 Unité de programmation : la procédure ou fonction Très semblable au math Un programme est un ensemble.
IUT du Limousin L.U.P Michel Vergnaud Programmation Objet - Java.
Chapitre III Introduction aux objets et aux classes.
Les classes Introduction aux Langages Orientés Objets
B.Shishedjiev - Affectation1 Expressions et affectation Comment produire des nouvelles valeurs.
Conception de Programmes - IUT de Paris - 1ère année – Cours 6 - Les opérateurs L’amitié Les opérateurs –Introduction –Surcharge par fonction.
Chapitre VII Techniques plus avancées à travers le concept de classe.
Langage de Programmation Orientée Objet : C++
Conception de Programmes - IUT de Paris - 1ère année Les classes Introduction Déclaration d’une classe Utilisation d’une classe Définition des.
1 Programmation en C++ Fonctions ● Déclaration et définition de fonctions ● Arguments ● Surcharge ● Arguments optionnels ● Fonctions constantes ● Fonctions.
Transcription de la présentation:

C++ 5ème cours Patrick Reuter maître de conférences

Les classes class Matrix2x2 {.. } –Définition : fichier en-tête Matrix2.2.h (avec les prototypes des méthodes/fonctions membres) –Implémentation : fichier source Matrix2x2.cpp (avec les implémentations des méthodes/fonctions membres)

#ifndef MATRIX2x2_H #define MATRIX2x2_H class Matrix2x2 { private: float _matrix[2][2]; public: // constructeur par defaut Matrix2x2(); // constructeur Matrix2x2(const float e00, const float e01, const float e10, const float e11); // destructeur par defaut ~Matrix2x2(); // Accès aux éléments float getElement(const unsigned int line, const unsigned int column) const; // Affecter les éléments void makeZero(); // Affecter les éléments void makeIdentity(); // Affecter les éléments void setElement( const unsigned int line, const unsigned int column, const float value); // Affecter les éléments void setElements( const float e00, const float e01, const float e10, const float e11); // Calculer le determinant float determinant() const; void afficher() const; Matrix2x2 addition (const Matrix2x2 matrix) const; Matrix2x2 operator+(const Matrix2x2 matrix) const; Matrix2x2 multiplication(const float k) const; Matrix2x2 operator*(const float k) const; }; #endif // define MATRIX_H Attributs ou propriétés Méthodes ou fonctions membres

#ifndef MATRIX2x2_H #define MATRIX2x2_H class Matrix2x2 { private: float _matrix[2][2]; public: // constructeur par defaut Matrix2x2(); // constructeur Matrix2x2(const float e00, const float e01, const float e10, const float e11); // destructeur par defaut ~Matrix2x2(); // Accès aux éléments float getElement(const unsigned int line, const unsigned int column) const; // Affecter les éléments void makeZero(); // Affecter les éléments void makeIdentity(); // Affecter les éléments void setElement( const unsigned int line, const unsigned int column, const float value); // Affecter les éléments void setElements( const float e00, const float e01, const float e10, const float e11); // Calculer le determinant float determinant() const; void afficher() const; Matrix2x2 addition (const Matrix2x2 matrix) const; Matrix2x2 operator+(const Matrix2x2 matrix) const; Matrix2x2 multiplication(const float k) const; Matrix2x2 operator*(const float k) const; }; #endif // define MATRIX_H Encapsulation private Propriétés et fonctions qui ne peuvent pas être accédées en dehors de la classe public Propriétés et fonctions peuvent être accédées en dehors de la classe

#ifndef MATRIX2x2_H #define MATRIX2x2_H class Matrix2x2 { private: float _matrix[2][2]; public: // constructeur par defaut Matrix2x2(); // constructeur Matrix2x2(const float e00, const float e01, const float e10, const float e11); // destructeur par defaut ~Matrix2x2(); // Accès aux éléments float getElement(const unsigned int line, const unsigned int column) const; // Affecter les éléments void makeZero(); // Affecter les éléments void makeIdentity(); // Affecter les éléments void setElement( const unsigned int line, const unsigned int column, const float value); // Affecter les éléments void setElements( const float e00, const float e01, const float e10, const float e11); // Calculer le determinant float determinant() const; void afficher() const; Matrix2x2 addition (const Matrix2x2 matrix) const; Matrix2x2 operator+(const Matrix2x2 matrix) const; Matrix2x2 multiplication(const float k) const; Matrix2x2 operator*(const float k) const; }; #endif // define MATRIX_H Constructeur est appelé lors de la création dun objet de la classe, porte le même nom que la classe Destructeur est appelé lors de la destruction dun objet de la classe, porte le même nom que la classe précédé d'un tilde ~ (explicitement par delete p.ex.)

#ifndef MATRIX2x2_H #define MATRIX2x2_H class Matrix2x2 { private: float _matrix[2][2]; public: // constructeur par defaut Matrix2x2(); // constructeur Matrix2x2(const float e00, const float e01, const float e10, const float e11); // destructeur par defaut ~Matrix2x2(); // Accès aux éléments float getElement(const unsigned int line, const unsigned int column) const; // Affecter les éléments void makeZero(); // Affecter les éléments void makeIdentity(); // Affecter les éléments void setElement( const unsigned int line, const unsigned int column, const float value); // Affecter les éléments void setElements( const float e00, const float e01, const float e10, const float e11); // Calculer le determinant float determinant() const; void afficher() const; Matrix2x2 addition (const Matrix2x2 matrix) const; Matrix2x2 operator+(const Matrix2x2 matrix) const; Matrix2x2 multiplication(const float k) const; Matrix2x2 operator*(const float k) const; }; #endif // define MATRIX_H Accesseurs Fonctions membres qui permettent daccéder aux données membres (get Mutateur Fonctions membres qui permettent de modifier les données membres (set)

Surdéfinition doperateurs Binaire (p.ex. 2+3 = 5) Unaire (p.ex. -3)

Opérateur binaire Matrix2x2 addition (const Matrix2x2 matrix) const; Matrix2x2 operator+(const Matrix2x2 matrix) const; la syntaxe de l'opération + est semblable à celle de addition(). matrix est le paramètre de l'opérateur +. lorsque l'on écrit A=B*C, –l'opérateur + est appelé pour l'objet B qui se trouve à gauche de +; à l'appel de cette opération, le paramètre de la fonction se trouve à droite de *. (alors C) les symboles possibles pour un opérateur binaire sont: (),[ ], ->, *,/,%,+,-, >,,>=,==,!=,&,, ||,&&,|,=, +=,-=,*=,/=,%=,&=,=,|=, >=,et la virgule,. Surdéfinition doperateurs

Operateur unaire Matrix2x2 operator-() const; –W=-V la seule entrée de - est l'objet V de la classe qui se trouve à droite. (il n'y a pas d'entrée à gauche). – Les symboles possibles pour un opérateur unaire sont: +,-,++,-,!,~,*,&,new,new[],delete,(cast) Surdéfinition doperateurs

Les flots > Rappel :Flot de sortie std::cout << "Hello World" << std::endl; Rappel :Flot dentrée int x; std::cin >> x;

Operateur<< Fichier.h (en dehors de classe {.. } std::ostream& operator<<(std::ostream& f, Matrix2x2 matrix); Fichier.cpp std::ostream& operator<<(std::ostream& f, Matrix2x2 matrix) { return f << "((" << matrix.getElement(0,0) << "," << matrix.getElement(0,1) <<"),(" << matrix.getElement(1,0) << ", " << matrix.getElement(1,1) << "))"; } Surdéfinition doperateurs

Ecrire dans un fichier void Matrix2x2::save(std::string nomFichier) const { std::ofstream fichierSortie(nomFichier.c_str()); fichierSortie << _matrix[0][0]; fichierSortie << " "; fichierSortie << _matrix[0][1]; fichierSortie << " "; fichierSortie << _matrix[1][0]; fichierSortie << " "; fichierSortie << _matrix[1][1]; } Flots et fichiers

Ecrire dans un fichier void Matrix2x2::save(std::string nomFichier) const { std::ofstream fichierSortie(nomFichier.c_str()); if ( !fichierSortie ) { std::cerr << "Erreur d'ouverture\n"; return; } fichierSortie << _matrix[0][0]; if ( !fichierSortie ) { std::cerr << "Erreur d'écriture\n"; return; } fichierSortie << " "; if ( !fichierSortie ) { std::cerr << "Erreur d'écriture\n"; return; } fichierSortie << _matrix[0][1]; if ( !fichierSortie ) { std::cerr << "Erreur d'écriture\n"; return; } Flots et fichiers fichierSortie << " "; if ( !fichierSortie ) { std::cerr << "Erreur d'écriture\n"; return; } fichierSortie << _matrix[1][0]; if ( !fichierSortie ) { std::cerr << "Erreur d'écriture\n"; return; } fichierSortie << " "; if ( !fichierSortie ) { std::cerr << "Erreur d'écriture\n"; return; } fichierSortie << _matrix[1][1]; if ( !fichierSortie ) { std::cerr << "Erreur d'écriture\n"; return; }

Lire dans un fichier void Matrix2x2::load(std::string nomFichier) { std::ifstream fichierEntree(nomFichier.c_str()); fichierEntree >> _matrix[0][0]; fichierEntree >> _matrix[0][1]; fichierEntree >> _matrix[1][0]; fichierEntree >> _matrix[1][1]; } Flots et fichiers

Lire dans un fichier void Matrix2x2::load(std::string nomFichier) { std::ifstream fichierEntree(nomFichier.c_str() ); if ( !fichierEntree ) { std::cerr << "Erreur d'ouverture\n"; return; } if ( ! ( fichierEntree >> _matrix[0][0] ) ) { std::cerr << "Erreur de lecture\n"; return; } if ( ! ( fichierEntree >> _matrix[0][1] ) ) { std::cerr << "Erreur de lecture\n"; return; } if ( ! ( fichierEntree >> _matrix[1][0] ) ) { std::cerr << "Erreur de lecture\n"; return; } if ( ! ( fichierEntree >> _matrix[1][1] ) ) { std::cerr << "Erreur de lecture\n"; return; } } Flots et fichiers

Récapitulatif Types de base ( bool, unsigned char, signed char, unsigned int, float, double) Type enumerateur enum t_etat {gaz=0, solide=1, liquide=4}; Type tableau type nom_du_tableau[taille]; -structure de données la plus connu -structure homogène, chaque élément est du même type Organisation de la mémoire

Déclaration de variables int counter; float diviseur; char c; double precision; string nom; bool masculin; diviseur = 1.1; compteur = 1; Nom = « Gerhard »; // Nombre entier // Nombre à virgule flottante // Nombre à virgule flottante avec double précision // caractère // Chaîne de caractère // VRAI/FAUX

Mémoire vive Proc 64bit 2,93 GHz : 2,93 Giga-Instructions par seconde

Organisation de la mémoire char jours[13]; {13 octets, statique!} jours[1]=31; jours[2]=30; … #0 jours[1] # # # jours[3] #2003 jours[12] # jours[2] # jours[0] #2000 Occupe de la place successive dans la mémoire jours[index] #(2000+index)

Organisation de la mémoire char a; #0 #1 #2 #3 a #4 #5... # # #

Organisation de la mémoire char a; a = 97; #0 #1 #2 #3 a #4 #5... # # #

Organisation de la mémoire char a; a = 97; #0 #1 #2 #3 a #4 #5... # # # Comment connaître ladresse de a ? &a

Organisation de la mémoire char a; a = 97; p_a = &a;{ Sauvegarder ladresse } #0 #1 #2 #3 a #4 #5... # # # Comment connaître ladresse de a ? &a

char a; char *p_a; {4 octets, lire : pointeur vers a} a = 97; p_a = &a;{ Sauvegarder ladresse } #0 #1 #2 #3 a #4 #5... # # p_a # Comment connaître ladresse de a ? Addr(a) p_a #1.001 p_a #1.002 p_a # « p_a pointe vers a »

char a; char *p_a; {4 octets, lire : pointeur vers a} a = 97; p_a = &a;{ Sauvegarder ladresse } *p_a = 10; a = 10;{ Déréférencement } #0 #1 #2 #3 a #4 #5... # # p_a # Comment connaître ladresse de a ? &a p_a #1.001 p_a #1.002 p_a #

char *p_a; {4 octets, lire : pointeur vers a} p_a = new p_a; *p_a = 10; #0 #1 #2 #3 *p_a #4 #5... # # p_a # Comment connaître ladresse de a ? &a p_a #1.001 p_a #1.002 p_a #

char a; char *p_a; {4 octets, lire : pointeur vers a} a = 97; p_a = &a;{ Sauvegarder ladresse } *p_a = 10; a = 10;{ Déréférencement } #0 #1 #2 #3 a #4 #5... # # p_a # Comment connaître ladresse de a ? &a p_a #1.001 p_a #1.002 p_a #

Tableaux dynamiques Loperateur new crée un objet en mémoire et renvoie un pointeur vers l'adresse de cet objet. char* jours; jours = new char[13]; jours[1] = 31; jours[2] = 28; jours[3] = 31;

char *jours; jours = new char[13]; #0 #1 #2 #3 &jours #4 #5... # # jours[0] # jours[1] #1.001 jours[2] #1.002 jours[3] #

Tableau dynamique const int WIDTH = 800; const int HEIGHT = 600; int i, x, y; char **tab; // le tableau à 2 dimensions = pointeur de pointeur tab = new char*[WIDTH]; for( i=0; i<WIDTH; i++ ) tab[i] = new char[HEIGHT]; // Exemple d'affectation dans le tableau -> c'est identique à // l'ancienne méthode for( y=0; y<HEIGHT; y++ ) for( x=0; x<WIDTH; x++ ) tab[x][y] = '1' + x+y; // Libération de la mémoire for( i=0; i<WIDTH; i++ ) delete []tab[i]; delete []tab; }

Format de fichier PPM P3 #exemple.ppm