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 :

Appeler la fonction qui se trouve dans une classe


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Appeler la fonction qui se trouve dans une classe
    bonjour j'ai des problèmes avec mon codes lorsqu'il me faut appeler une fonction qui se trouve dans une classe dans mon code. le but de programme et de faire de la gestion d'un garage automobile avec un menu qui renvoi à un menu et ainsi de suite. Pour appelé les fonctions se trouvant dans les classe dans mon menu je rencontre certaines difficultés. Est ce que quelqu'un serait à même d'éclairer mes lanternes à ce sujet.
    merci d'avance.
    je mets le code avec, ça peut servir.
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    #include <cstring>
    #include <iostream>
    #include <iomanip>
    #include <fstream>
    #include <string>
    #include <stdio.h>
    #include <stdlib.h>
    #define gab 25 // définition d'un gabarit
    #define num 10 // gabarit pour les numéros
    using namespace std;
    class GT
    {
    private:
    public:
        string marque, model, immatriculation, localisation;
        GT() { };
        GT(string, string, string, string);
        void afficher();
        void ajouter();
        void supprimer();
        void modifier();
    };
     
    class monoplace
    {
    private:
    public:
        string marque, type, couleur, localisation;
        monoplace() { };
        monoplace(string, string, string, string);
        void afficher();
        void ajouter();
        void supprimer();
        void modifier();
    };
     
    class karting
    {
    private:
    public:
        string numero, localisation, cylindre;
        karting() { };
        karting(string, string, string);
        void afficher();
        void ajouter();
        void supprimer();
        void modifier();
    };
    int main (void)
    {
        monoplace garage1[15];
        karting garage2[15];
        GT garage[15];
        int nbM = 1;
        int nbV = 1;
        int nbK=1;
        int menu (void);
        int menu1 (void);
        int menu2 (void);
        int menu3 (void);
        int menu4 (void);
        int menu5 (void);
        int menu6 (void);
        int choix;
        int choix1;
        int choix2;
        int choix3;
        int choix4;
        int choix5;
        int choix6;
        do
        {
            choix=menu();
            switch (choix)
            {
                case 1:do
                        {
                            choix1=menu1();
                            switch (choix1)
                            {
                                case 2:garage[15].supprimer();break;
                                case 3:garage[15].ajouter();break;
                                case 4:do
                                        {
                                            choix2=menu2();
                                            switch (choix2);
                                            {
                                                case 5:garage[15].afficher();break;
                                                case 6:garage[15].modifier();break;
                                            }
                                        }while (choix2==5||6);
                                        ;break;
                            }
                        }while(choix1==2||3||4);
                    ;break;
                case 7:do
                        {
                            choix3=menu3();
                            switch (choix3);
                            {
                                case 8:garage1[15].supprimer();break;
                                case 9:garage1[15].ajouter();break;
                                case 10:do
                                        {
                                            choix4=menu4();
                                            switch (choix4);
                                            {
                                                case 11:garage1[15].afficher();break;
                                                case 12:garage1[15].modifier();break;
                                            }
                                        }while (choix4==11||12);
                                        ;break;
                            }
                        }while(choix3==8||9||10);
                    ;break;
                case 13:do
                        {
                            choix5=menu5();
                            switch (choix5);
                            {
                                case 14:garage2[15].supprimer();break;
                                case 15:garage2[15].ajouter();break;
                                case 16:do
                                        {
                                            choix6=menu6();
                                            switch (choix6);
                                            {
                                                case 17:garage2[15].afficher();break;
                                                case 18:garage2[15].modifier();break;
                                            }
                                        }while (choix6==17||18);
                            ;break;
                            }
                        }while(choix5==14||15||16);
                    ;break;
                }
            }while (choix==1||7||13);
            return (0);
        int i;
        for (i=0;i<nbV+1;i++)
        {
            garage[i].afficher( );
        }
    }
    int menu(void)
    {
        int a;
        cout << "quel voiture voulez vous traiter" << endl;
        cout << "1 - une monoplace" << endl;
        cout << "2 - une GT" << endl;
        cout << "3 - un karting" << endl;
     
    }
    int menu1 (void)
    {
        int b;
        cout << "que voulez vous faire?" << endl;
        cout << "1 - supprimer une voiture?" << endl;
        cout << "2 - ajouter une voiture?" << endl;
        cout << "3 - afficher le garage" << endl;
        cin >> b;
        return(b);
     
    }
    int menu2(void)
    {
        int c;
        cout << "que voulez vous faire?" << endl;
        cout << "afficher la fiche technique de la voiture" << endl;
        cout << "modifier cette fiche technique" << endl;
        cin >> c;
        return (c);
    }
    int menu3 (void)
    {
        int d;
        cout << "que voulez vous faire?" << endl;
        cout << "1 - supprimer une voiture?" << endl;
        cout << "2 - ajouter une voiture?" << endl;
        cout << "3 - afficher le garage" << endl;
        cin >> d;
        return (d);
    }
    int menu4(void)
    {
        int e;
        cout << "que voulez vous faire?" << endl;
        cout << "afficher la fiche technique de la voiture" << endl;
        cout << "modifier cette fiche technique" << endl;
        cin >> e;
        return (e);
    }
    int menu5 (void)
    {
        int f;
        cout << "que voulez vous faire?" << endl;
        cout << "1 - supprimer une voiture?" << endl;
        cout << "2 - ajouter une voiture?" << endl;
        cout << "3 - afficher le garage" << endl;
        cin >> f;
        return (f);
    }
    int menu6 (void)
    {
        int g;
        cout << "que voulez vous faire?" << endl;
        cout << "afficher la fiche technique de la voiture" << endl;
        cout << "modifier cette fiche technique" << endl;
        cin >> g;
        return (g);
    }
    GT::GT( string marques="", string models="", string immat="", string loca="")
    {
    	marque = marques; model = models; immatriculation = immat; localisation = loca;
    }
    void GT::afficher()
    {
        cout <<"\nMarques : " << setw(gab) << marque << "/nModel : " << setw(gab) << model  << "\nImmatriculation : " << setw(gab) << immatriculation << "\nLocalisation : " << setw(gab) << localisation << endl;
    }
     
    void GT::ajouter()
    {
        nbV=nbV+1;
        cout << "saisissez la marque du vehicule que vous ajoute" << endl;
        cin >> garage[15].marque;
        cout << "saisissez le model de cette voiture" << endl;
        cin >> garage[15].model;
        cout << "saisissez son immatriculation" << endl;
        cin >> garage[15].immatriculation;
        cout << "où se trouve la voiture : " << endl;
        cout << "si elle est dans le garage ecriver garage" << endl;
        cout << "si elle est sur la piste ecriver sur la piste" << endl;
        cout << "si elle est en attente de pilote ecrivez stand" << endl;
        cout << "si elle est expose dans le hall ecriver expo" << endl;
        cin >> garage[15].localisation;
     
    }
    void ensemble (void)
    {
        int i;
        for (i=0;i<nbV+1;i++)
        {
            garage[i].afficher( );
        }
    }
    void ensemble1 (void)
    {
        int i;
        for (i=0;i<nbM+1;i++)
        {
            garage1[i].afficher( );
        }
    }
    void ensemble2 (void)
    {
        int i;
        for (i=0;i<nbK+1;i++)
        {
            garage2[i].afficher( );
        }
    }

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Le problème majeur que je vois, c'est que des fonctions membre de tes classes tentent de référencer directement des variables locales à d'autres fonctions.

    En fait, c'est toute ton interface qui a la même faille sur chaque classe: Tes classes sont des classes de "Truc", mais exposent des fonctions qu'on met généralement dans une classe "collection de Trucs".

    PS: Es-tu en cours d'apprentissage? À quoi as-tu accès? Conteneurs de la STL? Tableaux? Templates?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Ce que je voulais faire c'est faire des fonctions qui appartiennent a une classe afin d'utiliser les attributs de cette classe toi en enregistrant les "résultats" dans un tableau. Ensuite utiliser des fonctions qui vont utiliser des parties du tableau.

    Toutes l'interface est identique je ne fais que faire trois fois la même chose afin d'avoir un programme complet.

    PS: oui je suis étudiant en école d'ingénieur mais je ne connais pas trop les noms que vous m'avez donnez a part tableau.
    Merci de votre aide en tout cas

  4. #4
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    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 189
    Points : 17 141
    Points
    17 141
    Par défaut
    J'ai plusieurs choses à te proposer. Prenons ta première class.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class GT {
    private:
    public:
        string marque, model, immatriculation, localisation;
        GT() { };
        GT(string, string, string, string);
        void afficher();
        void ajouter();
        void supprimer();
        void modifier();
    };
    Tu as ici plusieurs choses distinctes:
    • la description de la voiture
    • son comportement interne
    • son utilisation (ou comportement externe)


    La description d'une voiture se fait via son interface constante, tandis que les valeurs sont cachées dans la partie private.
    Il y aurait alors des fonctions telles que std::string marque() const
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class GT {
    private:
        string marque_, model_, immatriculation_, localisation_;
    public:
        string marque() const;
        string model() const;
        string immatriculation() const;
        string localisation() const;
    //...
    };
    Un objet est sensé être propre: c'est-à-dire toujours dans un état valide.
    En temps normal, cela veut dire que hors de l'exécution d'une fonction, l'objet est dans le domaine de définition de la classe.
    En multithread, cela doit être vrai chaque fois qu'une interruption est possible.

    La première conséquence, c'est que tout constructeur s'achève sur un objet formé, dont les propriétés sont consultables et significatives.
    En résumé, le code suivant devrait être impossible à compiler:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    GT gt;
    gt.marque="Dassault";
    gt.model="F16";
    En effet, GT gt("Dassault", "F16"); est préférable.

    Cela implique que les membres sont privés, et surtout que les constructeurs construisent vraiment l'objet.
    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
    class GT {
    private:
        string marque_, modele_, immatriculation_, localisation_;
    public:
        GT(string marque, string modele, string immatriculation, string localisation);
        //pas de constructeur par défaut
        //le constructeur par copie du compilateur est suffisant (il n'y a que des chaines)
        //l'affectation aussi, pour la même raison
     
        string marque() const;
        string modele() const;
        string immatriculation() const;
        string localisation() const;
    //...
    };
    Sur la modélisation:
    Comme l'a dit Medinoc, tu mélanges l'objet et le tas d'objets.
    La classe GT représente UNE voiture. Pour en avoir plusieurs, utilise une collection.
    Ca peut etre une std::list, un std::vector ou un yoda::force_pillar, c'est comme tu veux.

    C'est une utilisation de la GT, comme plein d'autre.

    Par contre, tu n'a pas de classe Garage, ce qui est un peu étrange pour un programme de gestion de garage.
    Que penserais-tu de quelque chose comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class Garage{
    private:
        std::vector<GT> gts;
    public:
        Garage(std::string nom);
     
        Garage& ajouter(GT const&);
        Garage& ajouter(monoplace const&);
        Garage& ajouter(karting const&);
    };
    C'est un début de structure qui considère que les trois classes de véhicules sont des valeurs (copiables, sans sémantique d'entité)
    On va me dire que ce n'est pas bien, et je suis d'accord.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  5. #5
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2010
    Messages : 38
    Points : 50
    Points
    50
    Par défaut
    Salut,

    J'ai regardé ton code et des problème survient à plusieurs endroits tu "initialises" des variables (nbM, nbV, nbK) dans la fonction main() mais tu les utilises en dehors de celle-ci.

    La solution brute serait de passer ces variables en paramètre des fonctions qui les utilises.
    exemple : afficherGarage(int nbK) { ... }

    Ou la seconde et de faire comme le dit "Médinoc" à savoir tu pars sur le principe simple que toutes tes voitures sont dans des garages et que par conséquent un Garage peut être défini par une classe pouvant ajouter, editer, supprimer ou afficher des voitures. Ensuite vu que tu as 3 type de voitures (GT, Monoplace et Karting), il est envisageable de créer soit un tableau de 3 garages ou de créer 3 classes garages distincts qui aurait chacun leurs particularités par rapport au type qu'il gère (J'espère que c'est assez claire).

    Sinon pour l'aspect global évite de rassembler tout ton code dans un fichier que se soit pour ton topic ou pour toi parce que pour des aspects pratique ça ne va pas t'aider et nous non plus crois moi.

    Pour t'aider à comprendre ce que je dis, je t'ai codé une petite partie de ton programme à ma façon. Je dis pas que c'est la meilleure solution et de loin mais elle te donne un aperçu de comment procéder pour réaliser un programme dans ce genre.

    En espérant t'avoir aidé pour la suite.

    A+
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. [Lazarus] Comment utiliser une fonction qui se trouve dans une DLL externe ?
    Par [ZiP] dans le forum Lazarus
    Réponses: 2
    Dernier message: 01/12/2012, 00h33
  2. Appeler une fonction qui se trouve dans une autre fonction
    Par waxouse dans le forum ActionScript 1 & ActionScript 2
    Réponses: 1
    Dernier message: 11/05/2009, 16h28
  3. Réponses: 1
    Dernier message: 09/02/2009, 01h36
  4. Réponses: 12
    Dernier message: 05/02/2009, 14h51
  5. Appel à une fonction qui se trouve sur une autre page
    Par pierrot10 dans le forum Langage
    Réponses: 4
    Dernier message: 21/06/2007, 12h36

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