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

Langage C++ Discussion :

initialisation automatique d'un vecteur comme membre d'une classe


Sujet :

Langage C++

  1. #1
    Membre régulier
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2014
    Messages : 43
    Points : 97
    Points
    97
    Par défaut initialisation automatique d'un vecteur comme membre d'une classe
    J'ai une petite question :

    Dans le code qui suit, j'ai une classe Composant, et trois classe cercle rectangle et groupe qui en hérite.

    Je veux que mes groupe puissent contenir des composant j'ai donc un vecteur de pointeur sur des composant dans lequel je met les composants du groupe :

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    #ifndef DEF_COMPOSANT
    #define DEF_COMPOSANT
     
    #include <vector>
    #include <iostream>
    #include <string>
    using namespace std;
     
     
    class Composant {
     
    	public: virtual void ajoute(Composant * c) {}
    	public: virtual void affiche() = 0;
    	public: Composant(string nom) { this->nom = nom; }
    	public: virtual string getNom() { return this->nom; }
    	public: virtual ~Composant() {}
     
    	private: string nom;
    };
     
    class Cercle : public Composant {
     
    	public: Cercle(string nom) : Composant(nom) {}
    	public: void affiche() {
     
    		cout << "Cercle : " << this->getNom() << endl;
    	}
    };
     
    class Rectangle : public Composant {
     
    	public: Rectangle(string nom) : Composant(nom) {}
    	public: void affiche() {
     
    		cout << "Rectangle : " << this->getNom() << endl;
    	}
    };
     
    class Groupe : public Composant {
     
    	public: Groupe(string nom) : Composant(nom) {}
    	public: void ajoute (Composant * c) {
     
    		listeComposants.push_back(c);
    	}
    	public: void affiche() {
     
    		cout << "Groupe : " << this->getNom() << " contenant : " << endl;
    		for (int i = 0; i < listeComposants.size(); i++) {
     
    			listeComposants[i]->affiche();
    		}
    		cout << "----------- fin groupe " << this->getNom() << endl;
    	}
     
    	private: vector<Composant *> listeComposants;
    };
    #endif
    Vous avez peut être remarqué que je n'initialise jamais le membre listeComposant avec un new dans le constructeur de Groupe, et pourtant je ne rencontre aucun probleme, pourquoi ?

    voici le main que j'utilise pour tester le code :

    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
     
    #include "composant.h"
    using namespace std;
     
    int main() {
     
    	Cercle * c1 = new Cercle("C1");
    	Cercle * c2 = new Cercle("C2");
    	Rectangle * r1 = new Rectangle("R1");
    	c1->affiche();
     
    	Groupe * ga = new Groupe("GA");
    	ga->ajoute(c1);
    	ga->ajoute(r1);
    	ga->affiche();
    	Groupe * gb = new Groupe("GB");
    	gb->ajoute(ga);
    	gb->ajoute(c2);
    	gb->affiche();
    	delete c1;
    	delete c2;
    	delete r1;
    	delete ga;
    	delete gb;
    }

  2. #2
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 186
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 186
    Points : 17 126
    Points
    17 126
    Par défaut
    Bonjour!

    espèce de javateux...
    new est a utiliser avec prudence et parcimonie

    ton main devrait être (avec un petit refactor sur l'affichage)

    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
    #include <iostream>
    #include "composant.h"
     
    using std::cout;
    using std::endl;
     
    int main() {
    	Cercle c1("C1");
    	Cercle c2("C2");
    	Rectangle r1("R1");
    	cout << c1<<endl;
     
    	Groupe ga("GA");
    	ga.ajoute(&c1);
    	ga.ajoute(&r1);
    	cout << ga << endl;
     
    	Groupe gb("GB");
    	gb.ajoute(&ga);
    	gb.ajoute(&c2);
    	cout << gb << endl;
     
    	return 0;
    }
    auquel cas, il faut que tu ajoute une surcharge de << pour chaque classe, plutot que affiche().
    quitte à paramétriser affiche avec le stream.

    Et tant qu'on y est, public: ou private: sont "ongoing": ils sont valables pour toutes les déclarations à suivre.

    La réponse a ta question, c'est que new fait une allocation mémoire spécifique, mais que toute variable est construite.
    Le constructeur d'une classe crée chacune de ses variables lors de la liste d'initialisation.

    Un exemple pour l'explication:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class Bidule{
    public:
        const int constante;
        Bidule() : constante(0) {}
        Bidule(int i) : constante(i) {}
    };
     
    class ECHEC{
    public:
        const int constante;
        ECHEC(int i) {this->constante = i;}
    };
    ECHEC porte ce nom parce que le compilateur refusera le code. En effet, à l'ouverture de l'accolade, le membre constante aura déjà été créé et initialisé (avec la valeur par défaut des ints: 0)
    Du coup, dans le corps du constructeur, constante est déjà const.

    Le problème serait le même avec une référence.

    Pour ton vecteur, c'est la même chose: comme tu n'a rien précisé, le constructeur par défaut de vector a été appelé pendant l'initialisation.



    C++ n'est pas Java, ils ont des fonctionnements différents.
    Les objets sont déclarés et manipulés par valeur. Les références (et pointeurs) sont explicites.
    Tu ne devrais quasiment jamais avoir de pointeur dans ton code.
    A chaque fois que tu veux en écrire, demande toi pourquoi tu ne peux pas utiliser une référence.
    S'il n'y a pas de réponse c'est qu'il faut préférer cette dernière
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  3. #3
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 186
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 186
    Points : 17 126
    Points
    17 126
    Par défaut
    J'oubliais:

    On ne dois pas polluer.

    Il ne peut pas y avoir de using namespace dans un en-tête, et il faut éviter tout using type.

    La raison est que tu ne sais pas comment ton code sera inclus, et que quelqu'un peut très bien définir une classe ou pire une variable globale portant un nom tiré du namespace.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  4. #4
    Membre régulier
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2014
    Messages : 43
    Points : 97
    Points
    97
    Par défaut
    salut et merci pour la réponse très claire.

    il ne s'agit pas de mon code, il s'agit d'un vieux code d'un vieux livre sur c++ (c++98), peut etre est-ce pour ça.

    En tout cas, j'ai bien tout compris, sauf le coup du using dans l'en tête, je vais me renseigner sur ce que tu dis.

    eh oui bravo, j'ai été contraint de faire du Java (que je trouve ça beaucoup trop permissif et qui favorise les atrocités) pendant trop longtemps du coup je galère a reprendre les bon concept de C++ que j'avais pourtant je crois assimilé lorsque j'ai commencé le c++ il y a une quelques bonne années.


    Je me permettrait juste de justifier ma façon de déclarer mes membres public, private... je trouve que c'est pas élégant de mettre le même niveau d’indentation avec la classe et encore pire avec les membre, je ne me vois pas non plus le mettre entre les deux alors je les mets devant chaque déclaration.

  5. #5
    Membre chevronné

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2013
    Messages : 610
    Points : 1 878
    Points
    1 878
    Billets dans le blog
    21
    Par défaut
    Hello,

    Juste une petite suggestion, n'étudie pas le c++ dans un manuel de 98, le langage a bcp évolué! Son créateur a dit lui-même que le c++11 semblait un langage différent. Tu passerais à côté de plein de bonnes choses, entre autres des pointeurs intelligents (std::unique_ptr et std::shared_ptr) qui permettent de créer un objet sur le tas sans gérer explicitement la désallocation.

    Bon courage pour la suite...

  6. #6
    Membre régulier
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2014
    Messages : 43
    Points : 97
    Points
    97
    Par défaut
    merci pour la suggestion,

    mais si j'étudie avec ce vieux livre c'est parce que j'ai besoins de comprendre le cheminement qu'il y a eu dans l'histoire du langage, je chercherai ensuite un livre qui parle des éléments nouveaux parce que selon moi, en faisant de cette façon on comprend mieux pourquoi on utilise tel ou tel mécanisme, les raisons sous-jacentes aux différents élément qui composent le langage et donc on a une vue d'ensemble du langage qui permet une utilisation plus intuitive et plus significative quand on le place en tant qu'outils de création.

  7. #7
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 611
    Points
    30 611
    Par défaut
    Salut,
    Citation Envoyé par AliusEquinox Voir le message
    merci pour la suggestion,

    mais si j'étudie avec ce vieux livre c'est parce que j'ai besoins de comprendre le cheminement qu'il y a eu dans l'histoire du langage, je chercherai ensuite un livre qui parle des éléments nouveaux parce que selon moi, en faisant de cette façon on comprend mieux pourquoi on utilise tel ou tel mécanisme, les raisons sous-jacentes aux différents élément qui composent le langage et donc on a une vue d'ensemble du langage qui permet une utilisation plus intuitive et plus significative quand on le place en tant qu'outils de création.
    Autrement dit, tu veux passer par l'apprentissage du latin de Jules Cesar pour être en mesure d'apprendre l'italien...

    Nous sommes bien d'accord sur le fait que l'italien dérive en droite ligne du latin, mais crois tu vraiment que le latin soit un passage obligé

    Depuis 2011, nous avons une norme qui tend à se généraliser de plus en plus et qui est --globalement -- très bien supportée par les compilateurs récents. Elle a supprimé quelques fonctionnalités qui apparaissaient dans les normes antérieures (et encore, il n'y a que l'usage du mot clé auto qui me vienne à l'esprit ), mais en a ajouté pas mal.

    Tout cela pour dire que tu n'as absolument pas besoin d'apprendre C++ comme tu l'aurais appris en 1998, car cela revient à apprendre le latin au lieu de l'italien actuel

    Pire, l'approche utilisée par la plupart des cours, livres et tutoriels de l'époque aura pour effet de te donner un tas d'habitudes -- jugées comme bonnes, pour ne pas dire indispensables en C -- qui s'avéreront calamiteuses en C++ moderne.

    Sincèrement, tu aurais largement intérêt à t'intéresser au C++ moderne dans un premier temps, quitte à t'intéresser par la suite à l'évolution qu'il a suivie afin de savoir ce qui a été rajouté au fil des différentes normes
    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

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Je plussoie, de nos jours il est mieux de commencer par apprendre les bons usages, puis regarder l'historique.
    Apprendre à se servir d'un lave-linge avant d'apprendre que certaines civilisations antiques lavaient le linge à l'urine.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #9
    Membre régulier
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2014
    Messages : 43
    Points : 97
    Points
    97
    Par défaut
    Citation Envoyé par koala01 Voir le message
    Salut,
    Autrement dit, tu veux passer par l'apprentissage du latin de Jules Cesar pour être en mesure d'apprendre l'italien...

    Nous sommes bien d'accord sur le fait que l'italien dérive en droite ligne du latin, mais crois tu vraiment que le latin soit un passage obligé

    Depuis 2011, nous avons une norme qui tend à se généraliser de plus en plus et qui est --globalement -- très bien supportée par les compilateurs récents. Elle a supprimé quelques fonctionnalités qui apparaissaient dans les normes antérieures (et encore, il n'y a que l'usage du mot clé auto qui me vienne à l'esprit ), mais en a ajouté pas mal.

    Tout cela pour dire que tu n'as absolument pas besoin d'apprendre C++ comme tu l'aurais appris en 1998, car cela revient à apprendre le latin au lieu de l'italien actuel

    Pire, l'approche utilisée par la plupart des cours, livres et tutoriels de l'époque aura pour effet de te donner un tas d'habitudes -- jugées comme bonnes, pour ne pas dire indispensables en C -- qui s'avéreront calamiteuses en C++ moderne.

    Sincèrement, tu aurais largement intérêt à t'intéresser au C++ moderne dans un premier temps, quitte à t'intéresser par la suite à l'évolution qu'il a suivie afin de savoir ce qui a été rajouté au fil des différentes normes
    Je ne souhaite pas apprendre à parler italien autant que je ne souhaite pas apprendre (directement) à programmer en c++. Je sais (d'une certaine manière) déjà programmer en c++, maintenant je souhaite comprendre ce langage. Donc vous en conviendrez, pour cela j'ai besoin de l'étudier d'une manière méthodique, le plus simple étant d'utiliser sa chronologie.

    Citation Envoyé par Médinoc Voir le message
    Je plussoie, de nos jours il est mieux de commencer par apprendre les bons usages, puis regarder l'historique.
    Apprendre à se servir d'un lave-linge avant d'apprendre que certaines civilisations antiques lavaient le linge à l'urine.
    Évidemment, il est plus intelligent de lire le mode d'emploi du lave linge, plutôt que de vouloir comprendre comment fonctionne le lave linge pour être capable de le réparer par exemple si besoin il y a et par la même occasion de savoir comment s'en servir.
    Être moderne ce n'est pas savoir utiliser de la technologie, pour ça il suffit de savoir lire un mode d'emploi, et encore que maintenant avec les interfaces de plus en plus user-friendly, même les illettrés peuvent se débrouiller. Etre un Homme moderne c'est comprendre et être conscient de ce que l'on fait.

    Autant j'apprécie et j'éprouve de la gratitude pour les réponses claires et précises et les suggestions que l'on m'a faite, autant pour le reste, vous en conviendrez mais je ne m'y tiendrait pas, pour la simple raison que je ne pense pas comme vous.
    Je vous remercie pour les réponses que vous m'avez apportés

  10. #10
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Le problème, c'est que tu vas apprendre les mauvais automatismes!

    Tu vas apprendre à mettre des pointeurs nus dans tes classes alors que le problème a été résolu depuis trois ans grâce à std::unique_ptr<>!
    Tu vas apprendre des mécanismes à base de foncteurs templates, ou de pointeur de fonction et void*, alors que le problème a été résolu depuis trois ans grâce à std::func<>!

    Tu dois apprendre les bons automatismes avant d'étudier quels étaient ceux qui sont désormais mauvais!

    Je ne te demande pas de ne pas étudier le passé du tout, je te conjure seulement de ne le faire qu'une fois que tu maitrises parfaitement les bonnes pratiques actuelles.
    Je n'ai jamais dit de ne pas étudier le fonctionnement de ya machine à laver, seulement de savoir t'en servir d'abord et de ne pas apprendre à laver le linge à l'urine comme premier réflèxe.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  11. #11
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 186
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 186
    Points : 17 126
    Points
    17 126
    Par défaut
    Pardonne nous, mais apprendre comment fonctionne un lave-linge moderne sera plus efficace que d'apprendre comment fonctionne un vieux.
    Quitte à apprendre ensuite comment fonctionnait les anciens.

    Pour le fonctionnement, d'ailleurs, lis intégralement notre FAQ, elle te donnera des idées sur ce qu'il faut explorer.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  12. #12
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 611
    Points
    30 611
    Par défaut
    Citation Envoyé par AliusEquinox Voir le message
    Je ne souhaite pas apprendre à parler italien autant que je ne souhaite pas apprendre (directement) à programmer en c++. Je sais (d'une certaine manière) déjà programmer en c++, maintenant je souhaite comprendre ce langage. Donc vous en conviendrez, pour cela j'ai besoin de l'étudier d'une manière méthodique, le plus simple étant d'utiliser sa chronologie.



    Évidemment, il est plus intelligent de lire le mode d'emploi du lave linge, plutôt que de vouloir comprendre comment fonctionne le lave linge pour être capable de le réparer par exemple si besoin il y a et par la même occasion de savoir comment s'en servir.
    Être moderne ce n'est pas savoir utiliser de la technologie, pour ça il suffit de savoir lire un mode d'emploi, et encore que maintenant avec les interfaces de plus en plus user-friendly, même les illettrés peuvent se débrouiller. Etre un Homme moderne c'est comprendre et être conscient de ce que l'on fait.

    Autant j'apprécie et j'éprouve de la gratitude pour les réponses claires et précises et les suggestions que l'on m'a faite, autant pour le reste, vous en conviendrez mais je ne m'y tiendrait pas, pour la simple raison que je ne pense pas comme vous.
    Je vous remercie pour les réponses que vous m'avez apportés
    Citation Envoyé par Médinoc Voir le message
    Le problème, c'est que tu vas apprendre les mauvais automatismes!

    Tu vas apprendre à mettre des pointeurs nus dans tes classes alors que le problème a été résolu depuis trois ans grâce à std::unique_ptr<>!
    Tu vas apprendre des mécanismes à base de foncteurs templates, ou de pointeur de fonction et void*, alors que le problème a été résolu depuis trois ans grâce à std::func<>!

    Tu dois apprendre les bons automatismes avant d'étudier quels étaient ceux qui sont désormais mauvais!

    Je ne te demande pas de ne pas étudier le passé du tout, je te conjure seulement de ne le faire qu'une fois que tu maitrises parfaitement les bonnes pratiques actuelles.
    Je n'ai jamais dit de ne pas étudier le fonctionnement de ya machine à laver, seulement de savoir t'en servir d'abord et de ne pas apprendre à laver le linge à l'urine comme premier réflèxe.
    Citation Envoyé par leternel Voir le message
    Pardonne nous, mais apprendre comment fonctionne un lave-linge moderne sera plus efficace que d'apprendre comment fonctionne un vieux.
    Quitte à apprendre ensuite comment fonctionnait les anciens.

    Pour le fonctionnement, d'ailleurs, lis intégralement notre FAQ, elle te donnera des idées sur ce qu'il faut explorer.
    Si j'ai fait l'analogie entre le latin et l'italien, ce n'est pas sans raisons...

    Celle basée sur le lave linge Vs la lessive à l'urine est juste, mais, il n'y a finalement qu'une seule différence entre une langue existante et un langage de programmation : l'un des interlocuteurs est un ordinateur, et non un être humain. En dehors de cette différence et du besoin impératif de respecter un formalisme beaucoup plus précis qui en découle, un langage de programmation et une langue parlée sont exactement identiques : ce n'est que des conventions qui permettent à deux interlocuteurs de se comprendre.

    Il ne s'agit donc pas de s'inquiéter de la technologie en elle-même, mais bien d'apprendre les bons automatismes qui te permettront de te faire comprendre par quelque chose d'aussi bête qu'un ordinateur. Bien sur, il est important de connaître les automatismes d'avant C++11, mais c'est beaucoup plus pour avoir une idée des problèmes qu'ils posaient (et des solutions envisagées dans les normes suivantes pour y palier ) qu'autre chose...
    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

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

Discussions similaires

  1. Réponses: 14
    Dernier message: 16/11/2014, 22h58
  2. Réponses: 6
    Dernier message: 02/04/2008, 15h41
  3. Réponses: 2
    Dernier message: 30/01/2007, 17h55
  4. Réponses: 2
    Dernier message: 24/01/2007, 00h21
  5. Initialiser une référence membre d'une classe
    Par NicolasJolet dans le forum C++
    Réponses: 2
    Dernier message: 18/03/2006, 13h14

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