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 :

Déclarer array dans une class


Sujet :

C++

  1. #1
    Membre averti
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Avril 2014
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Avril 2014
    Messages : 35
    Par défaut Déclarer array dans une class
    Bonjour,

    je voudrais déclarer un tableau dans une classe dont la taille dépends d'un autre paramètre de la classe. Comment puis-je faire cela ? Par exemple si je fais simplement comme paramètre de la classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int taille;
    double tableau[];
    et après dans mon code je ne sais pas comment définir le tableau pour lui dire quand fait tableau est un tableau de taille "taille" ? J'ai aussi essaye de déclarer dans les paramètres de la classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int taille;
    double tableau[taille];
    sans succès

    Merci d'avance pour votre aide !

  2. #2
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    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 202
    Par défaut
    la taille du tableau doit être une constante à la déclaration de la classe (pas seulement à l'appel du constructeur).

    Tu peux faire appel à std::vector.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class Bidule {
        vector<int> tableau;
     
    public:
        Bidule(int taille) : tableau(taille, 0) {}
     
    };

  3. #3
    Membre très actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 103
    Par défaut
    Sinon, à l'ancienne on aurait ça :

    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
     
    // truc.h
    class truc
    {
    	int* tab;
    	int taille;
    	truc();
    };
     
    //truc.cpp
    //#include "truc.h"
    truc::truc()
    {
    	tab = new int[taille];
    }
    Mais je suis d'accord avec leternel, c'est mieux d'utiliser les vectors.

  4. #4
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    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 202
    Par défaut
    et encore, ton code n'est pas très correct, il manque un destructeur, et une garantie de validité

    ca serait plutot comme ceci. (en C++11, sinon, enlever le =delete et ne pas définir les fonctions)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class Bidule {
    private:
        int taille;
        int* data;
     
    public:
        Bidule(int n) : taille(n), data(new int[n]) {}
        ~Bidule() {delete[] data;}
     
    // non copiable, mais on pourrait faire une copie propre (faq: copy and swap)
    private:
        Bidule(Bidule const&) = delete;
        Bidule& operator=(Bidule const&) = delete;
    };
    Une meilleure version C++11 serait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class Bidule {
    private:
        int taille;
        std::unique_ptr<int[]> data;
     
    public:
        Bidule(int n) : taille(n), data(new int[n]) {}
     
    private:
        Bidule(Bidule const&) = delete;
        Bidule& operator=(Bidule const&) = delete;
    };

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 145
    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 145
    Billets dans le blog
    4
    Par défaut
    Et surtout en écrivant new int(taille) j'espère que tu t'attends pas à avoir plus que 1 entier.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  6. #6
    Membre très actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 103
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Et surtout en écrivant new int(taille) j'espère que tu t'attends pas à avoir plus que 1 entier.
    Tu as raison, il fallait écrire new int[taille] ? Merci pour cette correction !

Discussions similaires

  1. déclarer une callback dans une classe
    Par mathieu3392 dans le forum Débuter
    Réponses: 17
    Dernier message: 01/06/2015, 10h46
  2. Utiliser un Array d'une classe Java dans une autre
    Par cisco.nat dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 30/05/2013, 17h28
  3. Portée de variable de type Array dans une class
    Par oceanbigone dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 09/03/2013, 02h02
  4. [1.x] déclarer variables statiques dans une classe controller
    Par flora806 dans le forum Symfony
    Réponses: 8
    Dernier message: 15/10/2012, 17h26
  5. Réponses: 6
    Dernier message: 09/01/2009, 16h04

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