La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

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

Présentations similaires


Présentation au sujet: "C++ 5ème cours Patrick Reuter maître de conférences"— Transcription de la présentation:

1 C++ 5ème cours Patrick Reuter maître de conférences http://www.labri.fr/~preuter/c++

2 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)

3 #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

4 #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

5 #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.)

6 #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)

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

8 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

9 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

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

11 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

12 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

13 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; }

14 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

15 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

16 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

17 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

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

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

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

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

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

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

24 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... #536.870.910 #536.870.911 p_a #1.000 0 97 Comment connaître ladresse de a ? Addr(a) p_a #1.001 p_a #1.002 p_a #1.003 4 0 0 « p_a pointe vers a »

25 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... #536.870.910 #536.870.911 p_a #1.000 0 10 Comment connaître ladresse de a ? &a p_a #1.001 p_a #1.002 p_a #1.003 4 0 0

26 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... #536.870.910 #536.870.911 p_a #1.000 0 10 Comment connaître ladresse de a ? &a p_a #1.001 p_a #1.002 p_a #1.003 4 0 0

27 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... #536.870.910 #536.870.911 p_a #1.000 0 10 Comment connaître ladresse de a ? &a p_a #1.001 p_a #1.002 p_a #1.003 4 0 0

28 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;

29 char *jours; jours = new char[13]; #0 #1 #2 #3 &jours #4 #5... #536.870.910 #536.870.911 jours[0] #1.000 31 jours[1] #1.001 jours[2] #1.002 jours[3] #1.003 0 28 31

30 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; }

31 Format de fichier PPM P3 #exemple.ppm 4 255 0 0 0 16 16 16 32 32 32 48 48 48 64 64 64 80 80 80 96 96 96 112 112 112 128 128 128 143 143 143 159 159 159 175 175 175 191 191 191 207 207 207 223 223 223 239 239 239


Télécharger ppt "C++ 5ème cours Patrick Reuter maître de conférences"

Présentations similaires


Annonces Google