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 :

Accés (en statique) à un type non défini à travers une classe


Sujet :

Langage C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 42
    Points : 23
    Points
    23
    Par défaut Accés (en statique) à un type non défini à travers une classe
    Bonjour à tous!

    Voilà étant en train d'utiliser la bibliothèque Mysql++, j'ai analysé comment certaines classes sont construites, et il y a (surement) un élément de langage que je comprends pas.
    Pour ceux qui ne connaissent pas la bibliothèque, toutes les classes de celle-ci sont situées dans le namespace mysqlpp.
    Alors voici la classe mysqlpp::StoreQueryResult. Avec cette classe il se trouve que l'on peut récupérer le type
    comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysqlpp::StoreQueryResult::const_iterator it;
    C'est dans un exemple sur le site officiel de cette librairie: http://tangentsoft.net/mysql++/doc/h.../tutorial.html partie 3.2.
    Après avoir analysé le squelette de cette classe: ici, je suis plutôt étonné, car je ne vois pas le type const_iterator défini dans StoreQueryResult.
    Par contre on a le type, type_list défini comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef std::vector< Row > list_type
    qui lui justement contient const_iterator, comme il s'agit d'un objet de type Vector.
    Donc pour accéder à ce fameux const_iterator, on devrait normalement faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysqlpp::StoreQueryResult::type_list::const_iterator it;
    .
    Quelqu'un peut-il m'expliquer je vous prie?

    Merci d'avance

  2. #2
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 264
    Points : 6 683
    Points
    6 683
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    je ne connais pas cette bibliothèque, mais en regardant le code source de cette classe, on voit que la déclaration est la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class MYSQLPP_EXPORT StoreQueryResult :
                   public ResultBase,
                   public std::vector<Row>
    { /* ... */
    Ce qui signifie que cette classe hérite de ResultBase, mais surtout de std::vector<Row>, qui définit un 'nested' const_iterator.

    Hope it helps.

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    N'est-ce pas une mauvaise pratique d'hériter publiquement d'un conteneur ?

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 127
    Points : 33 036
    Points
    33 036
    Billets dans le blog
    4
    Par défaut
    Si ta classe ne fait aucune allocation dynamique, il n'y aura pas de soucis.

    En fait le seul souci est si tu réalises de l'allocation dynamique et le manipule en tant que std::vector lors de son delete. Le delete de ta class ne sera pas appelé et seul celui de std::vector le sera.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 42
    Points : 23
    Points
    23
    Par défaut
    Merci pour ta réponse rod, j'ai un peu honte d'avoir poser cette question maintenant, je ne sais même pas comment j'ai pu passer à côté de ça... .

    Suite à ta question oodini:
    N'est-ce pas une mauvaise pratique d'hériter publiquement d'un conteneur ?
    Je souhaiterais savoir, il est possible d'hériter "de manière privée" d'une classe?
    Si oui quel est la différence entre hériter publiquement et de manière privée?

    Merci

  6. #6
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 264
    Points : 6 683
    Points
    6 683
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Faror Voir le message
    Je souhaiterais savoir, il est possible d'hériter "de manière privée" d'une classe?
    Si oui quel est la différence entre hériter publiquement et de manière privée?
    L'héritage privé existe et il consiste à n'inclure dans la classe fille que les fonctions membres déclarée virtuelles.

    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
    class Mere
    {
    public:
       virtual void DoSomething() {}
     
       int value;
    };
     
    class FillePublique : public Mere {};
     
    class FillePrivee : private Mere {};
     
    main()
    {
       FillePublique fille_publique;
       fille_publique.DoSomething(); // appelle Mere::DoSomething()
       cout << fille_publique.value << endl; // affiche Mere::value
     
       FillePrivee fille_privee;
       fille_privee.DoSomething() // appelle Mere::DoSomething()
       cout << fille_privee.value << endl; // erreur: value n'existe pas dans FillePrivee
    }

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 42
    Points : 23
    Points
    23
    Par défaut
    Merci pour ta réponse.

Discussions similaires

  1. [VBA] Type non défini par l'utilisateur.
    Par ip203 dans le forum Access
    Réponses: 5
    Dernier message: 07/04/2008, 14h38
  2. variable avec un type non défini
    Par gign2585 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 24/05/2007, 18h10
  3. [DAO]type non défini / recherche valeur max dans un champ
    Par petitours dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 23/04/2007, 09h59
  4. [VB.Net] BC30002 : Type non défini
    Par beowax dans le forum VB.NET
    Réponses: 1
    Dernier message: 24/10/2006, 11h16
  5. [VB.NET] Type non défini quand j'appelle un Windows Form ?
    Par beegees dans le forum Windows Forms
    Réponses: 4
    Dernier message: 12/06/2006, 11h12

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