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 :

[Langage] Initialisation d'un vecteur membre statique


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut [Langage] Initialisation d'un vecteur membre statique
    Bonjour,

    Soit une hiérarchie de classes. Seules certaines d'entre elles seront directement instanciées (bien qu'elles soient pour l'instant toutes instanciables...).

    Je voudrais que chacune des classes instanciables continne un vecteur de chaînes de caractères, dont le contenu est spécifique à cette classe, et commun à toutes ses instances. Ce qui nous amène donc à la déclarer statique.

    Pour m'assurer de la présence de ce vecteur, je souhaitais donc le déclarer dans la classe parente, bien que seules certaines de ces classes dérivées vont remplir ce vecteur. Y a-t-il une méthode plus intelligente ?

    Si je reste sur cette conception, comment puis-je initialiser le vecteur de manière statique ?

    Merci.

  2. #2
    Membre chevronné
    Avatar de Florian Goo
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    680
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    Par défaut
    Bonjour,

    Attention, si tu déclares le vecteur dans la classe parent, toutes les classes dérivées vont partager le même vecteur.

    Pour initialiser un vecteur déclaré en static, tu peux appeler une fonction renvoyant un vecteur initialisé comme tu le souhaites :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    std::vector<int> vector_initializer()
    {
        std::vector<int> v;
        v.push_back(1);
        v.push_back(2);
        //…
        return v;
    }
     
    std::vector<int> my_class::my_vector = vector_initializer();
    Cours : Initiation à CMake
    Projet : Scalpel, bibliothèque d'analyse de code source C++ (développement en cours)
    Ce message a été tapé avec un clavier en disposition bépo.

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Merci pour l'astuce d'initialisation !

    Mais y a-t-il un moyen de contraindre les classes instanciables à avoir un vecteur statique ?

    Quelque chose comme les fonctions virtuelles pures, mais pour une donnée...

  4. #4
    Membre chevronné
    Avatar de Florian Goo
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    680
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    Par défaut
    Tout ce que tu peux faire, c'est forcer les classes dérivées à implémenter un accesseur (ou un getter) pour ce vecteur.
    Étant donné qu'une donnée membre, même statique, doit de préférence (si ce n'est toujours) être privée (même pas protected), cela devrait suffire, non ?
    Cours : Initiation à CMake
    Projet : Scalpel, bibliothèque d'analyse de code source C++ (développement en cours)
    Ce message a été tapé avec un clavier en disposition bépo.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    OK, je vais faire comme ça.

    Merci.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Ce qui est dommage, c'est que le contenu de la fonction en question est identique quelle que soit la classe, mais que je ne peux la factoriser, parce qu'elle fait appel à une donnée statique qui n'est définie que plus bas dans la hiérarchie... :-/

Discussions similaires

  1. Réponses: 6
    Dernier message: 24/10/2011, 15h30
  2. Réponses: 5
    Dernier message: 21/07/2007, 12h30
  3. Réponses: 2
    Dernier message: 20/07/2007, 10h44
  4. Initialisation membre statique
    Par vandamme dans le forum C++
    Réponses: 6
    Dernier message: 06/07/2007, 20h59
  5. Réponses: 6
    Dernier message: 22/09/2006, 13h31

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