IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

inherance répartir dans les fichiers


Sujet :

C++

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Expert sécurité informatique
    Inscrit en
    décembre 2020
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert sécurité informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : décembre 2020
    Messages : 21
    Points : 9
    Points
    9
    Par défaut inherance répartir dans les fichiers
    Bonjour a tous,

    j'ai trouver là https://www.tutorialspoint.com/cplus...nheritance.htm un exemple qui fonctionne dans un fichier cpp comment faire avec les quatre fichier suivant Rectangle.h Rectangle.cpp Shape.h Shape.cpp ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    /*
     * E.h
     *
     *  Created on: 6 mars 2021
     *      Author: vincent
     */
     
    #ifndef RECTANGLE_H_
    #define RECTANGLE_H_
    #include "Shape.h"
     
    class Rectangle: public Shape {
    public:
    	Rectangle();
    	virtual ~Rectangle();
    };
    #endif /* RECTANGLE_H_ */
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    /*
     * E.cpp
     *
     *  Created on: 6 mars 2021
     *      Author: vincent
     */
     
    #include "Rectangle.h"
     
    #include <iostream>
    using namespace std;
     
    // Derived class
    class Rectangle: public Shape {
       public:
          int getArea() {
             return (width * height);
          }
    };
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    /*
     * E.cpp
     *
     *  Created on: 6 mars 2021
     *      Author: vincent
     */
     
    #include "Rectangle.h"
     
    #include <iostream>
    using namespace std;
     
    // Derived class
    class Rectangle: public Shape {
       public:
          int getArea() {
             return (width * height);
          }
    };

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    /*
     * B.h
     *
     *  Created on: 6 mars 2021
     *      Author: vincent
     */
     
    #ifndef SHAPE_H_
    #define SHAPE_H_
     
    class Shape {
    public:
    	Shape();
    	virtual ~Shape();
    };
     
    #endif /* SHAPE_H_ */
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    #include <iostream>
    #include "Shape.h"
    #include "Rectangle.h"
     
    using namespace std;
     
    int main(void) {
       Rectangle Rect;
     
       Rect.setWidth(5);
       Rect.setHeight(7);
     
       // Print the area of the object.
       cout << "Total area: " << Rect.getArea() << endl;
     
       return 0;
    }

  2. #2
    Membre expérimenté

    Homme Profil pro
    Directeur de projet
    Inscrit en
    mai 2013
    Messages
    432
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : mai 2013
    Messages : 432
    Points : 1 368
    Points
    1 368
    Par défaut De long en large
    Bonjour,

    Il y a deux fois le même code (implémentation - très partielle - de Rectangle)

    D'où viendrait width et height puisqu'ils n'apparaissent ni dans Shape ni dans Rectangle ?

    De même les setWidth() et setHeight() sont définis où ?

    Cela semble plus du près à faire que du près à améliorer (l'exemple original ne souffre pas de ces défauts).

    Salutations
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Expert sécurité informatique
    Inscrit en
    décembre 2020
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert sécurité informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : décembre 2020
    Messages : 21
    Points : 9
    Points
    9
    Par défaut Merci beaucoup d'avoir répondu !
    Bonjour ,
    oui, je suis d'accord. tu as le lien qui fonctionne avec cpp unique et je me demande comment les ".h" sont construit. Personnellement c'est ma difficulté de construire les .h a partir des exemple cpp. dans le livre "c primer" c'est la même chose je bute sur cette question comment déclarer la classe qui va avec le code cpp. Bienvenue a ceux qui montre au moins une fois

  4. #4
    Membre expérimenté

    Homme Profil pro
    Directeur de projet
    Inscrit en
    mai 2013
    Messages
    432
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : mai 2013
    Messages : 432
    Points : 1 368
    Points
    1 368
    Par défaut Héritage et rage
    Bonjour,

    Il y a un exemple qui marche, il ne faut pas supprimer des éléments au hasard.

    Je propose une approche différente : reprendre le code d'origine et créer deux objets nouveaux.
    • Une ellipse qui hérite de Shape
    • Un carré qui hérite de Rectangle

    En s'inspirant de Rectangle qui hérite de Shape ce ne devrait pas être très difficile.

    Il faut ensuite peupler les méthodes de création (pour le carré) et de surface (pour l'ellipse).

    Une remarque, il faut éviter de renommer intempestivement les fichiers. Apparemment Shape.h serait devenu B.h (commentaires d'en-tête) mais les autres fichier cherchent toujours à inclure Shape.h !

    Bonne continuation
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

  5. #5
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    décembre 2015
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : décembre 2015
    Messages : 1 277
    Points : 6 262
    Points
    6 262
    Par défaut
    Bonjour,

    Ce qui doit être mis dans un fichier d'entête, c'est ce que les autres fichiers doivent connaître à minima pour accéder aux choses que tu définis dans ton code cpp.
    • Pour les variables et objets, le minimum est une déclaration de la variable ou de l'objet. Mais comme les variables et objets globaux c'est mal, on ne doit que très rarement voir cela.
    • Pour les fonctions et les opérateurs libres, le minimum est la déclaration de la fonction ou de l'opérateur. La déclaration est aussi appelée prototype dans ce cas. Il y a le type de retour et les types de tous les paramètres.
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      double carre( double );
    • Pour les enum, il faut mettre la définition (la déclaration suffit depuis le C++17 mais c'est particulier.)
    • Pour les classes et les unions, il faut en mettre la définition, et celle-ci doit être unique et pas en plusieurs morceaux comme tu as essayé de faire. Ça inclut tous les membres de la classe, donc les types inclus, les alias inclus, les variables inclues et les fonctions inclues y compris les constructeurs et destructeurs. Pour ces fonctions un simple prototype suffit, le corps peut-être défini dans le fichier cpp.
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      class Rectangle: public Shape {
      public:
      	Rectangle();                // prototype suffit, le corps défini ailleurs
      	~Rectangle()overide = default;   // corps du destructeur est ici automatique
      	int  getPerimeter()const;   // le prototype est le minimum.
      	int  getArea()const {        // cas particulier, on peut mettre le corps, la fonction est ici 'inline'
      		return  width * height; 
      	}
      };
    • On doit ajouter au début et à la fin un moyen d'éviter la réentrance de l'entête. Et on doit mettre les includes nécessaires à l'entête, l'entête doit utiliser les entêtes dont il a lui-même besoin ni plus ni moins.
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      #ifndef RECTANGLE_H_
      #define RECTANGLE_H_
      #include "Shape.h"  // rectangle a besoin de connaître Shape
       
      ...
       
      #endif /* RECTANGLE_H_ */
    Et on doit mettre dans le cpp tout ce qui n'est pas là.

    Il y a d'autres cas (les templates, les fonctions et les variables inline, les alias de types, les concepts, ...) mais je pense que ça devrait t'aider.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Expert sécurité informatique
    Inscrit en
    décembre 2020
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert sécurité informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : décembre 2020
    Messages : 21
    Points : 9
    Points
    9
    Par défaut Merci beaucoup d'avoir répondu !
    merci pour ta réponse très complète aurais tu un conseil de lecture

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Expert sécurité informatique
    Inscrit en
    décembre 2020
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert sécurité informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : décembre 2020
    Messages : 21
    Points : 9
    Points
    9
    Par défaut j'ai modifié comme suis mais j'obtiens une redéfinition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    /*
     * B.h
     *
     *  Created on: 6 mars 2021
     *      Author: vincent
     */
     
    #ifndef SHAPE_H_
    #define SHAPE_H_
     
    class Shape {
    public:
    	Shape();
    	virtual ~Shape();
    	void setWidth(int w);
    	void setHeight(int h);
    };
     
    #endif /* SHAPE_H_ */

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    /*
     * B.cpp
     *
     *  Created on: 6 mars 2021
     *      Author: vincent
     */
     
    #include "Shape.h"
    #include <iostream>
     
    using namespace std;
     
    // Base class
    class Shape {
       public:
          void setWidth(int w) {
             width = w;
          }
          void setHeight(int h) {
             height = h;
          }
     
       protected:
          int width;
          int height;
    };
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     /*
     * E.h
     *
     *  Created on: 6 mars 2021
     *      Author: vincent
     */
     
    #ifndef RECTANGLE_H_
    #define RECTANGLE_H_
    #include "Shape.h"
     
    class Rectangle : public Shape {
    public:
    	Rectangle();
    	virtual ~Rectangle();
    	void getArea(int width, int height) const;
    };
    #endif /* RECTANGLE_H_ */
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    *
     * E.cpp
     *
     *  Created on: 6 mars 2021
     *      Author: vincent
     */
     
    #include "Rectangle.h"
     
    #include <iostream>
    using namespace std;
     
    // Derived class
    class Rectangle : public Shape {
       public:
          int getArea(int width, int height)  {
             return (width * height);
          }
    };

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #include <iostream>
    #include "Shape.h"
    #include "Rectangle.h"
     
    using namespace std;
     
    int main(void) {
       Rectangle Rect;
     
       Rect.setWidth(5);
       Rect.setHeight(7);
     
       // Print the area of the object.
       cout << "Total area: " << Rect.getArea() << endl;
     
       return 0;
    }
    ce qui me parais normal vue que j'ai deux fois le même code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class Rectangle : public Shape {
    dans le .h et le .cpp mais comment faire alors ?

  8. #8
    Membre expérimenté

    Homme Profil pro
    Directeur de projet
    Inscrit en
    mai 2013
    Messages
    432
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : mai 2013
    Messages : 432
    Points : 1 368
    Points
    1 368
    Par défaut
    bonjour,

    Je pense que la cause est dans cette ligne du Rectangle.cpp:
    Code CPP : Sélectionner tout - Visualiser dans une fenêtre à part
     int getArea(int width, int height) {  return (width * height); };
    Les variables int width et int height sont déjà des propriétés de l'objet Rectangle (héritées de Shape), il n'en a donc pas besoin comme argument pour getArea() qui du reste est appelée sans argument dans le programme principal. C'est pourquoi ce double emploi est signalé par le compilateur.
    Il faut donc écrire dans Rectangle.cpp:
    Code CPP : Sélectionner tout - Visualiser dans une fenêtre à part
     int getArea() {  return (width * height); };
    Et dans Rectangle.h :
    Code CPP : Sélectionner tout - Visualiser dans une fenêtre à part
     int getArea(); // le ; indique que c'est juste la déclaration de la méthode
    Par ailleurs, il faudrait modifier le code de Shape de façon à ce qu'il interdise les dimensions négatives (soit il les force à 0 soit il ne les modifie pas). A ce propos, il serait bien qu'à la création de l'objet les dimensions soient initialisées.

    Salutations
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Expert sécurité informatique
    Inscrit en
    décembre 2020
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert sécurité informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : décembre 2020
    Messages : 21
    Points : 9
    Points
    9
    Par défaut j'ai modifié comme suis mais j'obtiens une toujours une redéfinition
    Bonjour
    j'ai modifié comme suis mais j'obtiens une toujours une redéfinition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    /*
     * B.h
     *
     *  Created on: 6 mars 2021
     *      Author: vincent
     */
     
    #ifndef SHAPE_H_
    #define SHAPE_H_
     
    class Shape {
    public:
    	Shape();
    	virtual ~Shape();
    	void setWidth(int w);
    	void setHeight(int h);
    };
     
    #endif /* SHAPE_H_ */
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    /*
     * B.cpp
     *
     *  Created on: 6 mars 2021
     *      Author: vincent
     */
     
    #include "Shape.h"
    #include <iostream>
     
    using namespace std;
     
    // Base class
    class Shape {
       public:
          void setWidth(int w) {
             width = w;
          }
          void setHeight(int h) {
             height = h;
          }
     
       protected:
          int width =0;
          int height =0;
    };
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    /*
     * E.h
     *
     *  Created on: 6 mars 2021
     *      Author: vincent
     */
     
    #ifndef RECTANGLE_H_
    #define RECTANGLE_H_
    #include "Shape.h"
     
    class Rectangle : public Shape {
    public:
    	Rectangle();
    	virtual ~Rectangle();
    	void getArea() const;
     
    };
    #endif /* RECTANGLE_H_ */
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    /*
     * E.cpp
     *
     *  Created on: 6 mars 2021
     *      Author: vincent
     */
     
    #include "Rectangle.h"
    #include "Shape.h"
     
    #include <iostream>
    using namespace std;
     
    // Derived class
    class Rectangle : public Shape{
       public:
          int getArea() {  return (width * height); }
    };
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #include <iostream>
    #include "Shape.h"
    #include "Rectangle.h"
     
    using namespace std;
     
    int main(void) {
       Rectangle Rect;
     
       Rect.setWidth(5);
       Rect.setHeight(7);
     
       // Print the area of the object.
       cout << "Total area: " << Rect.getArea() << endl;
     
       return 0;
    }
    merci pour votre aide je pense que c'est le fichier Rectangle.h qui pose problème
    vincent

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Expert sécurité informatique
    Inscrit en
    décembre 2020
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert sécurité informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : décembre 2020
    Messages : 21
    Points : 9
    Points
    9
    Par défaut un message pour dalfab
    Bonjour,
    j'ai essayer sans le fichier Rectangle.h et tes indications :
    Pour les classes et les unions, il faut en mettre la définition, et celle-ci doit être unique et pas en plusieurs morceaux comme tu as essayé de faire. Ça inclut tous les membres de la classe, donc les types inclus, les alias inclus, les variables inclues et les fonctions inclues y compris les constructeurs et destructeurs. Pour ces fonctions un simple prototype suffit, le corps peut-être défini dans le fichier cpp.

    Mais j' obtient encore une erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #ifndef RECTANGLE_H_
    #define RECTANGLE_H_
    #include "Shape.h"   // rectangle a besoin de connaître Shape
     class Rectangle: public Shape {
    public:
    	Rectangle();                // prototype suffit, le corps défini ailleurs
    	~Rectangle();   // corps du destructeur est ici automatique
    	 int getArea() {  return ( setWidth ()* setHeight()); }
     };
     
     
    #endif /* RECTANGLE
    il ne va pas chercher le Shape.h : "no matching function for call to ‘Rectangle::setHeight()’ "

  11. #11
    Membre expérimenté

    Homme Profil pro
    Directeur de projet
    Inscrit en
    mai 2013
    Messages
    432
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : mai 2013
    Messages : 432
    Points : 1 368
    Points
    1 368
    Par défaut A moitié corrigé ?
    Bonjour,

    On peut lire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void getArea() const; // dans le .h Rectangle.h
    Il faut être méticuleux : une fonction qui retourne une valeur entière ne peux être void.

    Ecrire plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int getArea(); // dans le .h Rectangle.h
    Sinon le compilateur croit à une redéfinition de getArea() et il n'est pas content.

    L'affectation de dimensions pourrait être améliorée. En fait si on peut lire et mettre n'importe quoi dans width et height pourquoi les déclarer en protected ?

    Exemple pour width :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void setWidth(int w) {  if(w >= 0) width = w; }
    Salutations
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

  12. #12
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    juin 2010
    Messages
    6 718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : juin 2010
    Messages : 6 718
    Points : 30 655
    Points
    30 655
    Billets dans le blog
    4
    Par défaut
    C'est assez évident que si tu écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class Shape {
    public:
    	Shape();
    	virtual ~Shape();
    	void setWidth(int w);
    	void setHeight(int h);
    };
    dans un fichier .h
    Puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class Shape {
       public:
          void setWidth(int w) {
             width = w;
          }
          void setHeight(int h) {
             height = h;
          }
     
       protected:
          int width =0;
          int height =0;
    };
    dans un .cpp
    Ben oui la classe est définie 2 fois.
    Faudrait commencer par (re)lire le chapitre 0 de déclaration d'une classe en C++ pour pas écrire n'importe quoi au petit bonheur.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Expert sécurité informatique
    Inscrit en
    décembre 2020
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert sécurité informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : décembre 2020
    Messages : 21
    Points : 9
    Points
    9
    Par défaut Merci beaucoup !
    il me faut un cours qui tienne la route en français si possible a votre bon cœur merci

  14. #14
    Membre expérimenté

    Homme Profil pro
    Directeur de projet
    Inscrit en
    mai 2013
    Messages
    432
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : mai 2013
    Messages : 432
    Points : 1 368
    Points
    1 368
    Par défaut Cours au long cours
    Bonjour,

    Citation Envoyé par vincent13990 Voir le message
    il me faut un cours qui tienne la route en français si possible a votre bon cœur merci
    1. Il y a le "Programmez avec le langage C++" de Mathieu Nebra et Matthieu Schaller qui se destine plutôt au gens qui ne connaissent pas déjà d'autres langages. Entre autres il commence par le commencement, se doter d'un environnement de développement.
    2. Il y a les bouquins de C. Delanoy chez Eyrolles qui sont un peu plus académiques.
    3. Il y a aussi "C++ en action" chez O'Reilly plus axé recettes.


    Il y en a certainement beaucoup d'autres mais je n'ai que très peu de références généralistes.

    A mon sens, s'il existe encore, le premier de la liste est le plus en adéquation avec ton besoin.

    Salutations
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

  15. #15
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    juin 2011
    Messages
    699
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : juin 2011
    Messages : 699
    Points : 3 379
    Points
    3 379
    Par défaut
    Les 2 premiers livres sont à éviter absolument !

    Le cours des Mathieu (qui est le même que sur OC) est dépassé depuis plus de 10ans et à l'époque il n’était déjà pas particulièrement bon.

    Principe de base: un cours qui ne commence pas à minima avec C++11 est un cours à éviter. À moins que le livre soit vraiment bon, les changements sont bien trop profonds pour que cela vaille la peine.

    Les livres de Claude Delannoy concernant le C++ sont truffés d'erreur et de mauvaise pratique. J'ai regardé tout l'heure un extrait de celui de 2019 parlant de C++ moderne, c'est légèrement mieux qu'avant (il y a des morceaux de C++11...), mais pour un livre intitulé "Programmer en C++ moderne, de C++11 à C++20", je trouve qu'il y a beaucoup trop de commentaire sur le C, le Java, C++98. L'aspect pédagogie des différentes approches y également totalement inexistante. Par exemple: présentation de l'allocation dynamique avec new[]/delete[] puis std::unique_ptr puis std::vector sans insister sur les dangers du premier, on est très loin de "programmer en C++ moderne". Le problème principal étant de vouloir mettre ensemble tout ce qui concerne l'allocation dynamique alors que new[]/delete[] sont des choses qui devraient être vu bien plus tard et std::vector bien plus tôt.

    Au passage un livre datant d'octobre 2019 parlant de C++20 (décembre 2020) s'avance beaucoup. La partie C++20 est une annexe de 15 pages parlant des modules et des concepts. 2 choses qui ont pas mal changé en 2020.

    Pour un cours de débutant, il y a le celui sur Zeste de savoir (dont une partie du contenu est toujours en bêta) ou le livre C++ Primer 5th Edition de Lippman (à ne pas confondre avec C++ Primer Plus).

  16. #16
    Futur Membre du Club
    Homme Profil pro
    Expert sécurité informatique
    Inscrit en
    décembre 2020
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert sécurité informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : décembre 2020
    Messages : 21
    Points : 9
    Points
    9
    Par défaut Merci beaucoup !
    Merci pour les réponses c'est difficile de trouver un bon cours sans budget illimité. je connais cet adresse mais je n'ai pas encore demander de conseils https:www.lmet.fr/URL]

  17. #17
    Membre expérimenté

    Homme Profil pro
    Directeur de projet
    Inscrit en
    mai 2013
    Messages
    432
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : mai 2013
    Messages : 432
    Points : 1 368
    Points
    1 368
    Par défaut Références et livres d'apprentissage
    Bonjour,

    S'il est vrai que les livres signalés sont anciens, ils sont surtout critiquables quand on progresse (quand on n'a plus besoin des petites roues sur le vélo). Ce ne sont pas des livres de référence.

    Si la demande initiale est bien "des livres en français pour débuter", je pense que le choix sera assez limité.

    Zeste de savoir présente un travail intéressant et clair. L'ordonnancement des rubriques est un peu étrange comme d'utiliser des objets avant d'avoir aborder le sujet. Par ailleurs, qui apprend un langage pour ne faire que de l'application console ? Entre autres, l'absence des composants, objets particuliers, semble assez pénalisante. Enfin ce n'est pas un livre, et le pdf n'y change rien.

    Le Lippman est un bon livre assez cher qui date de 2013. Il reste lui aussi concentré sur le cœur du langage sans s'intéresser vraiment au développement applicatif. A ma connaissance, il n'existe qu'en anglais ce qui ne correspond pas à la demande.

    Je me trompe peut être mais un livre d'initialisation doit présenter une plateforme de développement. Pour reprendre l'exemple à 2 roues, il est difficile d'apprendre à faire du vélo sans vélo. Que ce qui nous a mis en selle ne soit pas apte à nous préparer au tour de France est certain.

    La solution Zeste de savoir complétée par un cours sur une plateforme QT ou Visual (voire C++ builder) serait un compromis. Mais je doute qu'un tel cours existe intégralement en français et de qualité (il y en a en anglais bien sûr ). L'usage des FAQ et autres forums ne peuvent suffire car ils nécessitent d'avoir déjà un pied à l'étrier (pédale pour vélo type équidé).

    C'est une question simple sans réponse simple.

    Salutations
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

  18. #18
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    octobre 2004
    Messages
    11 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : octobre 2004
    Messages : 11 478
    Points : 29 758
    Points
    29 758
    Par défaut
    Salut,
    Citation Envoyé par Guesset Voir le message
    Bonjour,

    S'il est vrai que les livres signalés sont anciens, ils sont surtout critiquables quand on progresse
    C'est surtout que ces livres contiennent des aberrations sans nom que le coté "bien écrit" et "compréhensible" du livre ne permet pas à un débutant de se rendre compte des problèmes qui se posent.

    Or, si c'est pour apprendre quelque chose qu'il faudra s'efforcer d'oublier (ou de corriger très lourdement) et prendre des habitudes que nous aurons le plus grand mal à abandonner par la suite parce que "mais ca marche bien comme cela", ca ne vaut tout simplement pas la peine.
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  19. #19
    Futur Membre du Club
    Homme Profil pro
    Expert sécurité informatique
    Inscrit en
    décembre 2020
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert sécurité informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : décembre 2020
    Messages : 21
    Points : 9
    Points
    9
    Par défaut Merci beaucoup d'avoir répondu !
    j'ai pris le partie de me procurer le Lippman j'appends des tas de choses non vue en français. merci pour vos réponses.
    cordialement
    Vincent

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/06/2009, 17h49
  2. ne pas ecrire dans les fichier log
    Par HULK dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 07/04/2006, 08h22
  3. Réponses: 8
    Dernier message: 18/07/2005, 14h04
  4. Réponses: 3
    Dernier message: 29/12/2004, 17h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo