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 :

Classe imbriquées et indépendantes


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2017
    Messages : 7
    Par défaut Classe imbriquées et indépendantes
    Bonjour tous,
    j'ai une question sur la déclaration de classes et leur utilisation (à appliquer à un servomoteur).

    J'aurais ces 2 classes

    Classe TypeRotation
    int Vitesse
    int NbDegres
    int TempsArret
    bool SensHoraire


    Classe TypeBrassage
    int NbAllerRetour
    TypeRotation Aller
    TypeRotation Retour


    Sachant que je voudrais utiliser des variables de TypeRotation et TypeBrassage, comment je construis le plus proprement possible le TypeBrassage qui a 2 TypeRotation différents ?

  2. #2
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Tout simplement: comme tu l'as fait

    Tu as un fichier d'en-tête TypeRotation.hpp (Rotation.hpp ? ) qui ressemble à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #ifndef TYPEROTATION_HPP
    #define TYPEROTATION_HPP
    /* j'utilise une structure, car, pour l'instant, je ne vois pas ce que cela 
     * changerait d'en faire une classe
     */
    struct TypeRotation{   // struct Rotation ?
        int vitesse;      // int speed ?
        int nbDegres; // int degrees ?
        int tempArret; // int stopTime ?
        bool sensHoraire; // bool rightToLeft ?
    };
    #endif //TYPEROTATION_HPP
    et un fichier d'en-tête TypeBrassage.hpp qui ressemble à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #ifndef TYPEBRASSAGE_HPP
    #define TYPEBRASSAGE_HPP
    #include <TypeRotation.hpp>
    /* Même remarque que pour TypeRotation ;) */
    struct TypeBrassage { // Brewing ?
    /* Dans l'idéal, on place les données les plus grandes en haut des structures
     * (pour une sordide histoire d'alignement, quand cela fait sens ;) )
     */
       TypeRotation aller; // Rotation forth ?
       TypeRotation retour; // Rotation back ?
       int nbAllerRetour;   // int routes ?
    };
    #endif // TYPEBRASSAGE_HPP
    (il est souvent pas mal d'écrire son code en anglais, bien que tu aies évité de tomber dans l'utilisation d'une moitié de termes en anglais et de l'autre moitié en francais ... les commentaires proposent des noms dans la lange de shakespeare )

    De cette manière, en fonction des besoins, tu pourras soit inclure "uniquement" TypeRotation.hpp, si tu n'a vraiment besoin de connaitre que la rotation, ou bien, tu pourras décider d'inclure TypeBrassage.hpp si tu as besoin de connaitre les deux types (la rotation et le brassage)

    L'idée étant toujours de n'inclure que ce qui est strictement indispensable, ni plus (parce que cela ne fait que donner du taf inutile au compilateur) ni moins (parce que, de toutes façons, cela le fera râler)
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2017
    Messages : 7
    Par défaut
    Merci de ta réponse, elle me plaît car bien structurée et expliquée
    J'arrive de l'univers du VisualBasic donc je ne connais pas les " struct "
    J'étudie ça reviendrai avec du code plus précis que j'insérerai comme toi (comment on fait ça ?)

  4. #4
    Nouveau membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2017
    Messages : 7
    Par défaut
    Je viens de lire sur les Structures en C++

    Ça me semble la bonne solution car tout est public dans la structure Rotation et Brassage.

    Comme c'est un tout petit programme, tout serait mis dans le même fichier.

    Pour l'anglais, ça me parait naturellement plus proprre en effet mais je veux que ce soit facilement compréhensible par un public large.

    Une question que je n'ai pas trouvé dans ma recherche pour les classes ou structures, comment accède-t'on aux données de rotation d'un brassage ?

    If Brassage.Aller.Vitesse>10
    Ou

    Je dois sortir la structure Rotation dans une variable avant ?

    Merci de ta réponse

    (je te conseille de regarder la vidéo
    "Uncle Bob Clean Code"
    qui décrit comment et pourquoi écrire du ccode proprement
    Tu pourras continuer plus ta démarche de bon code qui semble très bien parti !!!)

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2017
    Messages : 7
    Par défaut
    Rebonjour,
    je reste sur la définition de classes car je pense qu'il y aura des méthodes associées à chacune des classes

    Pas contre, je ne comprends toujours pas comment instancier et bien déclarer ces imbrications de classes

    voici ci-dessous mon code


    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
     
     
    class TypeRotation
    {
        public:
            int NbDegres;
            int Vitesse;
            int TempsArret;
            int Sens;
            TypeRotation(int  intDegres,
                         int  intVitesse,
                         int  intTempsArret);
    };
     
     
     
     
     
    TypeRotation::TypeRotation(int  intNbDegres,
                                          int  intVitesse,
                                          int  intTempsArret)
    {
        NbDegres=intNbDegres; 
        Vitesse=intVitesse; 
        TempsArret=intTempsArret; 
    };
     
     
     
     
     
    class TypeBrassage
    {
        public: 
            TypeRotation RotationAller;
            TypeRotation RotationRetour;
            int          NbAllerRetour;
            TypeBrassage(int  intNbAllerRetour,
                         TypeRotation trAller,
                         TypeRotation trRetour);
    };
     
     
     
     
     
    TypeBrassage::TypeBrassage(int intNbAllerRetour,
                                           TypeRotation trAller,
                                           TypeRotation trRetour)
    {
        NbAllerRetour=intNbAllerRetour;
        RotationAller=Aller; 
        RotationRetour=Retour;        
    };
     
     
     
     
     
    void loop()
    {
        TypeRotation  RotationCourte(158,3,2);
        TypeRotation  RotationLongue(158,3,2);
        TypeBrassage  BrassageAmple(2,RotationLongue,RotationLongue);
        TypeBrassage  BrassageSerre(3,RotationCourte,RotationCourte);
     
        exit(0);
    };

  6. #6
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par défaut
    Tes classes ne sont pas du tout imbriquées.
    Tu as 2 classes, c'est tout, et une utilise l'autre.
    Et vu que les variables sont de simples variables (et pas pointeur ou référence), il faut que son type soit totalement connu avant de l'utiliser.
    Donc Rotation doit être déclarée avant Brassage.
    La bonne pratique est généralement de mettre chaque classe dans un fichier différent, puis tu inclues ce dont tu as besoin, quand tu en as besoin.
    As-tu lu un cours de C++ ? Ça me semble assez basique, t'as dû rater une étape.
    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.

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

Discussions similaires

  1. [C#]Remonter des événements dans des classes imbriquées
    Par Kcirtap dans le forum Windows Forms
    Réponses: 9
    Dernier message: 14/12/2013, 12h43
  2. Classe et Fenêtre indépendante
    Par croc14 dans le forum MFC
    Réponses: 61
    Dernier message: 14/06/2006, 07h57
  3. Classe imbriquée
    Par dj.motte dans le forum C++
    Réponses: 10
    Dernier message: 13/04/2006, 07h34
  4. classes imbriquées
    Par smedini dans le forum C++
    Réponses: 10
    Dernier message: 10/12/2005, 13h16
  5. Intérêt des classes imbriquées ?
    Par elitost dans le forum Langage
    Réponses: 5
    Dernier message: 21/10/2005, 09h30

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