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

SL & STL C++ Discussion :

Utiliser la STL dans les règles de l'art


Sujet :

SL & STL C++

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 433
    Points : 240
    Points
    240
    Par défaut Utiliser la STL dans les règles de l'art
    Bonjour,

    Je voudrais être sur et certain d'une chose sur l'utilisation de la STL.
    En fait je veux où et quand est-ce qu'il faut mettre le using namespace std;, et aussi quand il faut rajouter std:: devant les objets/types provenant de la STL.

    Sur un exemple simple, voila comment j'implémente d'habitude dites-moi si y'a un truc qui cloche ou qui pourrait être mieux écrit:

    maclasse.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
    #ifndef MACLASSE_H
    #define MACLASSE_H
     
     
    	#include <iostream>
    	#include <string>
     
     
    	class MaClasse {
     
    		public:
     
    			MaClasse( std::string chaine = "" );
    			MaClasse( const MaClasse &mc );
    			~MaClasse();
     
    			friend std::ostream& operator<<(std::ostream &flux, const MaClasse mc);
     
     
    		private:
     
    			std::string chaine;
     
    	};
     
     
    #endif
    maclasse.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
    18
    19
    20
    21
    22
    23
    24
    25
    using namespace std;
     
    #include <iostream>
    #include <string>
    #include "maclasse.h"
     
     
    // Constructeur simple
    MaClasse :: MaClasse( string chaine )
    	: chaine(chaine) { }
     
    // Constructeur par recopie
    MaClasse :: MaClasse( const MaClasse &mc )
    	: chaine( mc.chaine ) { }
     
    // Destructeur
    MaClasse :: ~MaClasse() { }
     
     
     
    // Insertion de flux
    ostream& operator<<(ostream &flux, const MaClasse mc) {
     
    	return (flux << mc.chaine);
    }
    main.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
    using namespace std;
     
    #include <iostream>
    #include "maclasse.h"
     
     
    int main() {
     
    	MaClasse mc("Une chaine");
     
    	cout << mc;
     
    	return 0;
    }

  2. #2
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    je dirais que c'est déjà pas mal.
    il est déconseillé de mettre le using dans le .h (ce que tu n'as pas fait, donc ça va)
    après dans le .cpp ça dépend. tu peux faire ce que tu as fait ou inclure uniquement ce dont tu as besoin (using std::string par exemple). ça sert surtout quand tu utilises des classes de meme nom mais appartenant à des namespace différents

    cela n'a rien à voir avec la STL, mais avec l'utilisation de bibliothèques en règle général.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 433
    Points : 240
    Points
    240
    Par défaut
    Dans le .h, si je ne met pas les std:: devant les objets/types le code se compile normalement, donc je voudrais savoir s'il est vraiment nécessaire de le faire, si c'est mieux ou moins bien.

    Et pour ce qui est du using namespace std; il me semble bien que mon prof de C++ nous a dit de le mettre après les includes, cela est-il vraiment important? Est ce que ca change quelque chose?

    Merci déjà pour tes premières réponses ^^

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Points : 1 543
    Points
    1 543
    Par défaut
    Citation Envoyé par FabaCoeur
    Et pour ce qui est du using namespace std; il me semble bien que mon prof de C++ nous a dit de le mettre après les includes, cela est-il vraiment important? Est ce que ca change quelque chose?
    Un 'include' ça veut vraiment dire ce que ça veut dire : le compilateur inclut le fichier dans le fichier qui fait l'inclusion à l'endroit du #include.
    Donc oui il vaut mieux mettre les 'using' après les 'include' pour éviter qu'il n'interfère avec le code contenu dans les fichiers inclus.

    Sinon personnellement je ne mets jamais de 'using' pour le namespace std, je trouve beaucoup plus clair de taper par exemple 'std::string' systématiquement, mais c'est une question de goût

    MAT.

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 433
    Points : 240
    Points
    240
    Par défaut
    Donc en fait, si je comprends bien, si je met le using après les includes, l'utilisation des std:: dans les .h deviendra obligatoire, non ?

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Points : 1 543
    Points
    1 543
    Par défaut
    Citation Envoyé par FabaCoeur
    Donc en fait, si je comprends bien, si je met le using après les includes, l'utilisation des std:: dans les .h deviendra obligatoire, non ?
    Oui.

    En même temps c'est aussi une bonne pratique de faciliter l'utilisation de tes classes pour "quelqu'un d'autre" et donc de ne pas obliger à faire un 'using' avant d'inclure tes fichiers de déclaration.

    MAT.

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 433
    Points : 240
    Points
    240
    Par défaut
    D'accord je comprends mieux maintenant, merci pour toutes ces précisions !
    Je pense que soulever ce point est important car j'ai pas trouvé beaucoup d'endroit où l'on parle des conventions "standard" pour bien organiser un projet.

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 433
    Points : 240
    Points
    240
    Par défaut
    Des nouvelles question me viennent maintenant...!

    1) En fait je me rends compte en parlant sur MSN avec un amis que je n'ai pas trop compris pourquoi il ne faut pas mettre de using namespace dans un fichier .h, je ne le fais jamais car je sais qu'il ne faut pas, mais pourquoi? Est ce que vous avez une explications simple?

    2) Si on a une classe template on est contraint à implémenter tout le code dans le fichier .h. Etant donné que l'on n'utilise pas de using namespace dans un fichier .h, on est donc contraint à mettre std:: devant tous les types/classes? C'est assez lourd, non? Pas de solution alternative?

  9. #9
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Points : 1 543
    Points
    1 543
    Par défaut
    Citation Envoyé par FabaCoeur
    pourquoi il ne faut pas mettre de using namespace dans un fichier .h
    Toujours pour la même raison : ne pas nuire à "quelqu'un" qui inclut tes fichiers en le forçant à avoir un 'using namespace' pas forcément voulu.

    Citation Envoyé par FabaCoeur
    C'est assez lourd, non? Pas de solution alternative?
    Pour std:: ça va quand même, mais c'est vrai que pour boost::asio::ip::udp::endpoint par exemple ça commence à faire

    Et non pas de solution alternative, mais c'est de toute façon quand même plus sûr de préciser complètement les types dans une déclaration que "tout le monde" peut inclure et utiliser.

    MAT.

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 433
    Points : 240
    Points
    240
    Par défaut
    Encore une fois merci pour toutes tes réponses !
    Je pense avoir désormais tout compris

  11. #11
    Membre éclairé Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Points : 871
    Points
    871
    Par défaut
    Tu peux toujours faire des typedef pour raccourcir =).

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 27/11/2007, 23h05
  2. utilisation des sessions dans les jsp
    Par casho dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 16/08/2006, 20h45
  3. [MySQL] Utilisation du caractère "`" dans les requêtes
    Par PeZ dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 07/03/2006, 17h01

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