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 :

.h un peu bizarre


Sujet :

C++

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut .h un peu bizarre
    Bonjour tous, je dois reprendre le programme de quelqu'un mais il y a des choses un peu bizarre:

    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 <string>
    #include <vector>
    #include "A.h"
    using namespace std;
     
    class Entree
    {
        public:
            Entree(string);
            ~Entree();
        private:
            vector <A*> A;
            ifstream Entreefile;
            void EntreeA();
            void EntreeB();
            void EntreeC();
            void EntreeD();
    };
    j'ai l'impression qu'il ya des betises:

    1°) En fait d'apres ce que j'ai appris en C++ il ne faut pas mettre des methodes en privée or la c'est la premiere chose que je vois, es ce normale?

    2°) La deuxieme chose que j'ai appris et de ne pas mettre using namespace std; dans les .h, je ne sais pas pourquoi par contre
    ==> es ce grave si on le met ?

    3°) dans le main voici aussi ce qu'il a mi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Entree* entree = new Entree("entree");
        delete entree;
    je ne comprends pas qu'es ce, mais surtout ca me parait bizarre que ca soit dans le main car pour moi le main ne ser qu'a appeler les methodes de nos objets?

    une autre chose: je n'ai jamais vu ces deux choses:

    <vector>
    ifstream Entreefile;

    a quoi cela sert il s'il vous plait?

    merci d'avance pour votre aide

  2. #2
    Membre éclairé Avatar de seeme
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    430
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 430
    Points : 791
    Points
    791
    Par défaut
    1°) En fait d'apres ce que j'ai appris en C++ il ne faut pas mettre des methodes en privée or la c'est la premiere chose que je vois, es ce normale?

    1°) La deuxieme chose que j'ai appris et de ne pas mettre using namespace std; dans les .h, je ne sais pas pourquoi par contre
    ==> es ce grave si on le met ?

    une autre chose: je n'ai jamais ces deux choses:

    <vector>
    ifstream Entreefile;
    1) Il n'y a pas de problème à mettre des methodes privée, ça sert à éviter que quelqu'un d'extérieur ne manipule des fonction à la place de l'objet. SI par exemple tu as une fonction qui calcul quelque chose une fois qu'une variable a été modifiée, tu vas avoir une méthode setVariable(type mavar) et une calculer().

    Si tu veux être sûr que personne ne va lancer "calculer" à n'importe quel moment (sans que la variable ai été modifiée), il faut mettre la méthode privée (ce n'est qu'une illustration, il y a beaucoup d'exemple).

    2) Effectivement, il ne faut pas mettre de using namespace (quelque soit le namespace) dans un .h En fait, le problème c'est que tous les fichiers qui vont inclure ce .h vont être impactés par le using namespace.

    Si tu as une méthode cout à toi, perso, et que tu la met dans un namespace "perso".

    Si dans un .h quelqu'un place un using namespace std ou perso, et bien dans ton code, tu ne sauras pas quel cout sera appelé: le tiens ou le std?

    Bref on perd en clareté et l'interêt de namespace s'envole.

    vector <A*> A;
    Il s'agit d'un conteneur de la STL: le vector (je te renvois à la FAQ) qui sert à collectionner des pointeurs vers des instances de A.

    ifstream:
    Il s'agit d'un flux d'entrée de fichier.

    Une recherche dans google avec man std::vector et man ifstream devrait t'éclairée.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    Citation Envoyé par seeme Voir le message
    1) Il n'y a pas de problème à mettre des methodes privée, ça sert à éviter que quelqu'un d'extérieur ne manipule des fonction à la place de l'objet. SI par exemple tu as une fonction qui calcul quelque chose une fois qu'une variable a été modifiée, tu vas avoir une méthode setVariable(type mavar) et une calculer().
    Si tu veux être sûr que personne ne va lancer "calculer" à n'importe quel moment (sans que la variable ai été modifiée), il faut mettre la méthode privée (ce n'est qu'une illustration, il y a beaucoup d'exemple).
    2) Effectivement, il ne faut pas mettre de using namespace (quelque soit le namespace) dans un .h En fait, le problème c'est que tous les fichiers qui vont inclure ce .h vont être impactés par le using namespace.
    Si tu as une méthode cout à toi, perso, et que tu la met dans un namespace "perso".
    Si dans un .h quelqu'un place un using namespace std ou perso, et bien dans ton code, tu ne sauras pas quel cout sera appelé: le tiens ou le std?
    Bref on perd en clareté et l'interêt de namespace s'envole.
    merci de ton aide, je pense avoir compris!


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    vector <A*> A;
    Il s'agit d'un conteneur de la STL: le vector (je te renvois à la FAQ) qui sert à collectionner des pointeurs vers des instances de A.
    ifstream:
    Il s'agit d'un flux d'entrée de fichier.
    Une recherche dans google avec man std::vector et man ifstream devrait t'éclairée.
    c'est vrai que j'aurais pu aller voir la faq avant desolé mais comme j'ecrivais le post je me suis dit autant demander...


    merci en tout cas de ton aide je pense avoir saisi

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    Citation Envoyé par 21did21 Voir le message
    3°) dans le main voici aussi ce qu'il a mi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Entree* entree = new Entree("entree");
        delete entree;
    je ne comprends pas qu'es ce, mais surtout ca me parait bizarre que ca soit dans le main car pour moi le main ne ser qu'a appeler les methodes de nos objets?
    il n'y a plus qu'une chose que j'ai du mal à saisir c'est cela?
    car pour moi le main seulement à appeler des objet de cette facon:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    entree.lire(int, double);

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    (j'ai oublié de preciser "entree" est un fichier texte)

  6. #6
    Membre éclairé Avatar de seeme
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    430
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 430
    Points : 791
    Points
    791
    Par défaut
    Citation Envoyé par 21did21 Voir le message
    il n'y a plus qu'une chose que j'ai du mal à saisir c'est cela?
    car pour moi le main seulement à appeler des objet de cette facon:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    entree.lire(int, double);
    LE main, c'ets le point d'entrée. Maintenant, si tu n'as pas d'instance de tes objets, à moins qu'ils soient tous static (improbable), il va bien falloir les instancier quelque part.

    Donc là il crée un pointeur sur une instance de Entree, puis il appel la méthode lire. D'ailleurs, en tout logique, ça devrait être entree->lire(), et pas entree.lire() (ou d'autres choses moins lisible d'ailleurs)...

    Tu ne pourras pas appeller entree->lire() si entree n'existe pas.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    ah ok merci

  8. #8
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Ceci dit, en termes d'architecture, il y a quand même un énorme problème.

    A quoi sert une classe qui n'a pas de comportement ? En C++, ça veut dire que l'intégralité des fonctions de la classe sont exécutée lorsque celle-ci est instanciée. Ce qui revient à mettre tout le code dans le constructeur (et plus rien ensuite). Ce qui revient à mettre tout le code dans une fonction libre.

    Ce qui revient à dire qu'il n'y a pas besoin d'une classe.
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

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

Discussions similaires

  1. Une question un peu bizarre
    Par krapoulos2006 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 18/12/2006, 23h16
  2. un warning un peu bizarre
    Par salseropom dans le forum C
    Réponses: 2
    Dernier message: 26/10/2006, 10h09
  3. premier pas... un peu bizarre
    Par gaia-harastra dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 10/01/2006, 09h00
  4. [CSS] float un peu bizarre sous FF.
    Par elraton dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 10/10/2005, 18h59
  5. Requete sql un pti peu bizarre
    Par lamoufle dans le forum Langage SQL
    Réponses: 3
    Dernier message: 26/08/2005, 08h39

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