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 sans déclaration et pointeur de fonction


Sujet :

C++

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    502
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 502
    Points : 227
    Points
    227
    Par défaut classe sans déclaration et pointeur de fonction
    Bonsoir,

    j'édudie le code source de flightgear 2.0

    je n'arrive pas à bien comprendre les classe sans déclaration,
    est ce que cela sert à créer une sorte "alias".

    voici le code source :

    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
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    // globals.hxx -- Global state that needs to be shared among the sim modules
    //
    // Written by Curtis Olson, started July 2000.
    //
    // Copyright (C) 2000  Curtis L. Olson - http://www.flightgear.org/~curt
    //
    // This program is free software; you can redistribute it and/or
    // modify it under the terms of the GNU General Public License as
    // published by the Free Software Foundation; either version 2 of the
    // License, or (at your option) any later version.
    //
    // This program is distributed in the hope that it will be useful, but
    // WITHOUT ANY WARRANTY; without even the implied warranty of
    // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    // General Public License for more details.
    //
    // You should have received a copy of the GNU General Public License
    // along with this program; if not, write to the Free Software
    // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
    //
    // $Id$
     
     
    #ifndef _GLOBALS_HXX
    #define _GLOBALS_HXX
     
    #include <simgear/compiler.h>
    #include <simgear/props/props.hxx>
    #include <simgear/structure/subsystem_mgr.hxx>
     
    #include <vector>
    #include <string>
     
    typedef std::vector<std::string> string_list;
     
    // Forward declarations
     
    // This file is included, directly or indirectly, almost everywhere in
    // FlightGear, so if any of its dependencies changes, most of the sim
    // has to be recompiled.  Using these forward declarations helps us to
    // avoid including a lot of header files (and thus, a lot of
    // dependencies).  Since Most of the methods simply set or return
    // pointers, we don't need to know anything about the class details
    // anyway.
     
    class SGEphemeris;
    class SGCommandMgr;
    class SGMagVar;
    class SGMaterialLib;
    class SGPropertyNode;
    class SGTime;
    class SGEventMgr;
    class SGSubsystemMgr;
    class SGSubsystem;
    class SGSoundMgr;
     
    class FGAIMgr;
    class FGATCMgr;
    class FGAircraftModel;
    class FGControls;
    class FGFlightPlanDispatcher;
    class FGNavList;
    class FGAirwayNetwork;
    class FGTACANList;
    class FGLight;
    class FGModelMgr;
    class FGRouteMgr;
    class FGScenery;
    class FGMultiplayMgr;
    class FGPanel;
    class FGTileMgr;
    class FGViewMgr;
    class FGViewer;
    class FGRenderer;
    class FGFontCache;
     
     
    /**
     * Bucket for subsystem pointers representing the sim's state.
     */
     
    class FGGlobals
    {
     
    private:
     
        // properties, destroy last
        SGPropertyNode_ptr props;
        SGPropertyNode_ptr initial_state;
     
        // localization
        SGPropertyNode_ptr locale;
     
        FGRenderer *renderer;
        SGSubsystemMgr *subsystem_mgr;
        SGEventMgr *event_mgr;
        SGSoundMgr *soundmgr;
     
        // Number of milliseconds elapsed since the start of the program.
        double sim_time_sec;
     
        // Root of FlightGear data tree
        std::string fg_root;
     
        // Roots of FlightGear scenery tree
        string_list fg_scenery;
     
        std::string browser;
     
        // An offset in seconds from the true time.  Allows us to adjust
        // the effective time of day.
        long int warp;
     
        // How much to change the value of warp each iteration.  Allows us
        // to make time progress faster than normal (or even run in reverse.)
        long int warp_delta;
     
        // Time structure
        SGTime *time_params;
     
        // Sky structures
        SGEphemeris *ephem;
     
        // Magnetic Variation
        SGMagVar *mag;
     
        // Material properties library
        SGMaterialLib *matlib;
     
        // Global autopilot "route"
        FGRouteMgr *route_mgr;
     
        // 2D panel
        FGPanel *current_panel;
     
        // ATC manager
        FGATCMgr *ATC_mgr;
     
        // AI manager
        FGAIMgr *AI_mgr;
     
        // control input state
        FGControls *controls;
     
        // viewer manager
        FGViewMgr *viewmgr;
     
        SGCommandMgr *commands;
     
      //FGFlightPlanDispatcher *fpDispatcher;
     
        FGAircraftModel *acmodel;
     
        FGModelMgr * model_mgr;
     
        // list of serial port-like configurations
        string_list *channel_options_list;
     
        // A list of initial waypoints that are read from the command line
        // and or flight-plan file during initialization
        string_list *initial_waypoints;
     
        // FlightGear scenery manager
        FGScenery *scenery;
     
        // Tile manager
        FGTileMgr *tile_mgr;
     
        FGFontCache *fontcache;
     
        // Navigational Aids
        FGNavList *navlist;
        FGNavList *loclist;
        FGNavList *gslist;
        FGNavList *dmelist;
        FGNavList *tacanlist;
        FGNavList *carrierlist;
        FGTACANList *channellist;
        FGAirwayNetwork *airwaynet;
     
        //Mulitplayer managers
        FGMultiplayMgr *multiplayer_mgr;
     
    public:
     
        FGGlobals();
        virtual ~FGGlobals();
     
        virtual FGRenderer *get_renderer () const;
     
        virtual SGSubsystemMgr *get_subsystem_mgr () const;
     
        virtual SGSubsystem *get_subsystem (const char * name);
     
        virtual void add_subsystem (const char * name,
                                    SGSubsystem * subsystem,
                                    SGSubsystemMgr::GroupType
                                    type = SGSubsystemMgr::GENERAL,
                                    double min_time_sec = 0);
     
        virtual SGEventMgr *get_event_mgr () const;
     
        virtual SGSoundMgr *get_soundmgr () const;
     
        inline double get_sim_time_sec () const { return sim_time_sec; }
        inline void inc_sim_time_sec (double dt) { sim_time_sec += dt; }
        inline void set_sim_time_sec (double t) { sim_time_sec = t; }
     
        inline const std::string &get_fg_root () const { return fg_root; }
        void set_fg_root (const std::string &root);
     
        inline const string_list &get_fg_scenery () const { return fg_scenery; }
        void set_fg_scenery (const std::string &scenery);
     
        inline const std::string &get_browser () const { return browser; }
        void set_browser (const std::string &b) { browser = b; }
     
        inline long int get_warp() const { return warp; }
        inline void set_warp( long int w ) { warp = w; }
        inline void inc_warp( long int w ) { warp += w; }
     
        inline long int get_warp_delta() const { return warp_delta; }
        inline void set_warp_delta( long int d ) { warp_delta = d; }
        inline void inc_warp_delta( long int d ) { warp_delta += d; }
     
        inline SGTime *get_time_params() const { return time_params; }
        inline void set_time_params( SGTime *t ) { time_params = t; }
     
        inline SGEphemeris *get_ephem() const { return ephem; }
        inline void set_ephem( SGEphemeris *e ) { ephem = e; }
     
        inline SGMagVar *get_mag() const { return mag; }
        inline void set_mag( SGMagVar *m ) { mag = m; }
     
        inline SGMaterialLib *get_matlib() const { return matlib; }
        inline void set_matlib( SGMaterialLib *m ) { matlib = m; }
     
        inline FGATCMgr *get_ATC_mgr() const { return ATC_mgr; }
        inline void set_ATC_mgr( FGATCMgr *a ) {ATC_mgr = a; }
     
        inline FGAIMgr *get_AI_mgr() const { return AI_mgr; }
        inline void set_AI_mgr( FGAIMgr *a ) {AI_mgr = a; }
     
        inline FGPanel *get_current_panel() const { return current_panel; }
        inline void set_current_panel( FGPanel *cp ) { current_panel = cp; }
     
        inline FGControls *get_controls() const { return controls; }
        inline void set_controls( FGControls *c ) { controls = c; }
     
        inline FGViewMgr *get_viewmgr() const { return viewmgr; }
        inline void set_viewmgr( FGViewMgr *vm ) { viewmgr = vm; }
        FGViewer *get_current_view() const;
     
        inline SGPropertyNode *get_props () { return props; }
        inline void set_props( SGPropertyNode *n ) { props = n; }
     
        inline SGPropertyNode *get_locale () { return locale; }
        inline void set_locale( SGPropertyNode *n ) { locale = n; }
     
        inline SGCommandMgr *get_commands () { return commands; }
     
        inline FGAircraftModel *get_aircraft_model () { return acmodel; }
     
        inline void set_aircraft_model (FGAircraftModel * model)
        {
            acmodel = model;
        }
     
        inline FGModelMgr *get_model_mgr () { return model_mgr; }
     
        inline void set_model_mgr (FGModelMgr * mgr)
        {
          model_mgr = mgr;
        }
     
        inline FGMultiplayMgr *get_multiplayer_mgr () { return multiplayer_mgr; }
     
        inline void set_multiplayer_mgr (FGMultiplayMgr * mgr)
        {
          multiplayer_mgr = mgr;
        }
     
        inline string_list *get_channel_options_list () {
    	return channel_options_list;
        }
        inline void set_channel_options_list( string_list *l ) {
    	channel_options_list = l;
        }
     
        inline string_list *get_initial_waypoints () {
            return initial_waypoints;
        }
     
        inline void set_initial_waypoints (string_list *list) {
            initial_waypoints = list;
        }
     
        inline FGScenery * get_scenery () const { return scenery; }
        inline void set_scenery ( FGScenery *s ) { scenery = s; }
     
        inline FGTileMgr * get_tile_mgr () const { return tile_mgr; }
        inline void set_tile_mgr ( FGTileMgr *t ) { tile_mgr = t; }
     
        inline FGFontCache *get_fontcache() const { return fontcache; }
     
        inline FGNavList *get_navlist() const { return navlist; }
        inline void set_navlist( FGNavList *n ) { navlist = n; }
        inline FGNavList *get_loclist() const { return loclist; }
        inline void set_loclist( FGNavList *n ) { loclist = n; }
        inline FGNavList *get_gslist() const { return gslist; }
        inline void set_gslist( FGNavList *n ) { gslist = n; }
        inline FGNavList *get_dmelist() const { return dmelist; }
        inline void set_dmelist( FGNavList *n ) { dmelist = n; }
        inline FGNavList *get_tacanlist() const { return tacanlist; }
        inline void set_tacanlist( FGNavList *n ) { tacanlist = n; }
        inline FGNavList *get_carrierlist() const { return carrierlist; }
        inline void set_carrierlist( FGNavList *n ) { carrierlist = n; }
        inline FGTACANList *get_channellist() const { return channellist; }
        inline void set_channellist( FGTACANList *c ) { channellist = c; }
     
        inline FGAirwayNetwork *get_airwaynet() const { return airwaynet; }
        inline void set_airwaynet( FGAirwayNetwork *a ) { airwaynet = a; }
     
     
       /**
         * Save the current state as the initial state.
         */
        void saveInitialState ();
     
     
        /**
         * Restore the saved initial state, if any.
         */
        void restoreInitialState ();
     
    };
     
     
    extern FGGlobals *globals;
     
     
    #endif // _GLOBALS_HXX


    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
     
    class SGEphemeris;
    class SGCommandMgr;
    class SGMagVar;
    class SGMaterialLib;
    class SGPropertyNode;
    class SGTime;
    class SGEventMgr;
    class SGSubsystemMgr;
    class SGSubsystem;
    class SGSoundMgr;
     
    class FGAIMgr;
    class FGATCMgr;
    class FGAircraftModel;
    class FGControls;
    class FGFlightPlanDispatcher;
    class FGNavList;
    class FGAirwayNetwork;
    class FGTACANList;
    class FGLight;
    class FGModelMgr;
    class FGRouteMgr;
    class FGScenery;
    class FGMultiplayMgr;
    class FGPanel;
    class FGTileMgr;
    class FGViewMgr;
    class FGViewer;
    class FGRenderer;
    class FGFontCache;
    ma deuxieme question concerne le pointeur de fonction :

    normalement le pointeur de fonction n'attend aucun argument :
    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
    #ifndef _FG_OS_HXX
    #define _FG_OS_HXX
     
    #ifdef HAVE_CONFIG_H
    #  include <config.h>
    #endif
     
    #include <string>
    #include <vector>
     
    #include <osg/ref_ptr>
    #include <osg/Camera>
    #include <osg/GraphicsContext>
     
     
    enum { MOUSE_BUTTON_LEFT,
           MOUSE_BUTTON_MIDDLE,
           MOUSE_BUTTON_RIGHT };
     
    enum { MOUSE_BUTTON_DOWN,
           MOUSE_BUTTON_UP };
     
    enum { MOUSE_CURSOR_NONE,
           MOUSE_CURSOR_POINTER,
           MOUSE_CURSOR_WAIT,
           MOUSE_CURSOR_CROSSHAIR,
           MOUSE_CURSOR_LEFTRIGHT,
           MOUSE_CURSOR_TOPSIDE,
           MOUSE_CURSOR_BOTTOMSIDE,
           MOUSE_CURSOR_LEFTSIDE,
           MOUSE_CURSOR_RIGHTSIDE,
           MOUSE_CURSOR_TOPLEFT,
           MOUSE_CURSOR_TOPRIGHT,
           MOUSE_CURSOR_BOTTOMLEFT,
           MOUSE_CURSOR_BOTTOMRIGHT,
    };
     
    enum { KEYMOD_NONE     = 0,
           KEYMOD_RELEASED = 1, // Not a mod key, indicates "up" action
           KEYMOD_SHIFT    = 2,
           KEYMOD_CTRL     = 4,
           KEYMOD_ALT      = 8,
           KEYMOD_META     = 16,
           KEYMOD_SUPER    = 32,
           KEYMOD_HYPER    = 64,
           KEYMOD_MAX      = 128 };
     
    // A note on key codes: none are defined here.  FlightGear has no
    // hard-coded interpretations of codes other than modifier keys, so we
    // can get away with that.  The only firm requirement is that the
    // codes passed to the fgKeyHandler function be correctly interpreted
    // by the PUI library.  Users who need to hard-code key codes
    // (probably not a good idea in any case) can use the pu.hxx header
    // for definitions.
     
    //
    // OS integration functions
    //
     
    void fgOSInit(int* argc, char** argv);
    void fgOSOpenWindow(bool stencil);
    void fgOSFullScreen();
    void fgOSMainLoop();
    void fgOSExit(int code);
     
    void fgSetMouseCursor(int cursor);
    int  fgGetMouseCursor();
    void fgWarpMouse(int x, int y);
     
    int  fgGetKeyModifiers();
     
    void fgRequestRedraw();
     
    //
    // Callbacks and registration API
    //
     
    namespace osg { class Camera; class GraphicsContext; }
    namespace osgGA { class GUIEventAdapter; }
     
    typedef void (*fgIdleHandler)();
    typedef void (*fgDrawHandler)();
    typedef void (*fgWindowResizeHandler)(int w, int h);
     
    typedef void (*fgKeyHandler)(int key, int keymod, int mousex, int mousey);
    typedef void (*fgMouseClickHandler)(int button, int updown, int x, int y, bool mainWindow, const osgGA::GUIEventAdapter*);
    typedef void (*fgMouseMotionHandler)(int x, int y);
     
    void fgRegisterIdleHandler(fgIdleHandler func);
    void fgRegisterDrawHandler(fgDrawHandler func);
    void fgRegisterWindowResizeHandler(fgWindowResizeHandler func);
     
    void fgRegisterKeyHandler(fgKeyHandler func);
    void fgRegisterMouseClickHandler(fgMouseClickHandler func);
    void fgRegisterMouseMotionHandler(fgMouseMotionHandler func);
    #endif // _FG_OS_HXX

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    typedef void (*fgIdleHandler)();
    typedef void (*fgDrawHandler)();
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    fgIdleHandler idleHandler;
        fgDrawHandler drawHandler;
    pourquoi ce ponteur de fonction à 0 en argumant ?.

    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
     
    FGEventHandler::FGEventHandler() :
        idleHandler(0),
        drawHandler(0),
        windowResizeHandler(0),
        keyHandler(0),
        mouseClickHandler(0),
        mouseMotionHandler(0),
        statsHandler(new osgViewer::StatsHandler),
        statsEvent(new osgGA::GUIEventAdapter),
        statsType(osgViewer::StatsHandler::NO_STATS),
        currentModifiers(0),
        resizable(true),
        mouseWarped(false),
        scrollButtonPressed(false)
    {
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    FGEventHandler::FGEventHandler() :
        idleHandler(0),
        drawHandler(0),
    merci !
    merci !

  2. #2
    Membre éprouvé
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Points : 1 220
    Points
    1 220
    Par défaut
    Bonjour.

    Je vais commencer par répondre à la seconde question.

    Citation Envoyé par Asmod_D Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    FGEventHandler::FGEventHandler() :
        idleHandler(0),
        drawHandler(0),
    merci !
    merci !
    Ici il s'agit d'un constructeur or dans la liste d'initialisation d'un constructeur, la syntaxe est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    MaClasse::MaClasse( paramètres ... ): attribut1(valeur1),attribut2(valeur2),...,attributn(valeurn)
    {
    //Reste du constructeur.
    }
    avec pour MaClasse la structure suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class MaClasse
    {
      type1 atribut1;
      type2 attribut2;
      ...
      typen attributn;
    public:
      MaClasse(paramètres ...)
      ...
    }
    Ici, tes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    FGEventHandler::FGEventHandler() :
        idleHandler(0),
        drawHandler(0),
    sont donc des initialisation de tes pointeurs à 0 (= NULL= '\0'). Juste histoire de dire qu'ils ne pointent sur rien.




    Citation Envoyé par Asmod_D Voir le message
    je n'arrive pas à bien comprendre les classe sans déclaration,
    est ce que cela sert à créer une sorte "alias".
    [...]
    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
     
    class SGEphemeris;
    class SGCommandMgr;
    class SGMagVar;
    class SGMaterialLib;
    class SGPropertyNode;
    class SGTime;
    class SGEventMgr;
    class SGSubsystemMgr;
    class SGSubsystem;
    class SGSoundMgr;
     
    class FGAIMgr;
    class FGATCMgr;
    class FGAircraftModel;
    class FGControls;
    class FGFlightPlanDispatcher;
    class FGNavList;
    class FGAirwayNetwork;
    class FGTACANList;
    class FGLight;
    class FGModelMgr;
    class FGRouteMgr;
    class FGScenery;
    class FGMultiplayMgr;
    class FGPanel;
    class FGTileMgr;
    class FGViewMgr;
    class FGViewer;
    class FGRenderer;
    class FGFontCache;
    En fait, il s'agit simplement de prédéclarer des classes dont on manipule des pointeurs mais qui seront, ellles déclarées plus tard: en effet, sans ces prédéclarations, le compilateur refuserait de compiler un FGRenderer* ou autre pointeur sur une de ces classes. Mais pourquoi ne pas inclure les header de ces classes alors ? Par-ce que celles ci utilisent probablement des propriétés de FGGlobal et que pour ces classes-ci, il faudrait également inclure FGGlobal en header... mais alors il faudrait inclure touts les autres headers avant... et on rentrerait dans une boucle récursive et on s'en sortirait pas

    Bon, il me semble avoir répondu , mais pas sûr, tu a posté beaucoup de code.


    Bonne chance
    Méphistophélès
    Si la solution ne résout pas votre problème, changez le problème...
    Cours et tutoriels C++ - FAQ C++ - Forum C++.

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Bonjour,
    Petite question de vocabulaire : ce que tu nous montres c'est justement la déclaration. Ce que tu voulais demander c'est pourquoi il n'y a pas de définition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class tutu; // ==> déclaration
    class tutu
    {
    }; //  ==> définition (+ déclaration de facto)
    Lors d'une déclaration, on dit juste au compilateur à quoi correspond le symbole (ici, une classe) mais sans lui donner le contenu. C'est exactement la même chose lorsque tu déclares une fonction avant de la définir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void ma_fonction();
    void une_autre_fonction();
    {
       // [...] blablabla
       ma_fonction(); // on peut l'utiliser sans savoir ce qu'elle contient
       //
    }
    Et bien, pour une déclaration de classe, c'est la même idée : pour définir des variables/arguments pointeurs (ou références ), nul besoin de la définition complète de la classe, la déclaration anticipée suffit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class A;
    class B
    {
       A *m_pa; // déclaration anticipée suffit
       void fonction(A const&ra_); // déclaration anticipée suffit
    };
    Bien sûr dans le .cpp, on peut avoir besoin de la définition de la classe, il faut donc alors inclure son en-tête :
    b.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #include "b.h"
    #include "a.h"
    void B::fonction(A const&ra_)
    {
       ra_.coucou();
    }
    A quoi ça sert ?
    -> Créer 2 classes qui font référence l'une à l'autre ?
    -> Diminuer les dépendances entre les classes : Une classe C qui aurait besoin de B ne va voir que A et pas toutes les classes dont A dépend puisque la déclaration anticipée ne montre pas ces dépendances.

    Pour ta seconde question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    FGEventHandler::FGEventHandler() :
        idleHandler(0),
        drawHandler(0),
    Ceci n'est pas un appel de fonction mais l'initialisation du pointeur de fonction à NULL (i.e. : 0) dans la liste d'initialisation de la classe.

    [edit : grilled]

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    502
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 502
    Points : 227
    Points
    227
    Par défaut
    merci , vous avez bien repondu à mes questions .

    merci encore !!

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

Discussions similaires

  1. [Win32] Pointeur sur fonctions et méthodes de classe
    Par Invité dans le forum Langage
    Réponses: 4
    Dernier message: 13/09/2007, 19h07
  2. Déclaration de pointeur de fonction et structure
    Par ShaiLeTroll dans le forum Delphi
    Réponses: 28
    Dernier message: 05/04/2007, 10h48
  3. Réponses: 12
    Dernier message: 30/06/2006, 16h46
  4. Glut / Class / Pointeur sur fonction
    Par areS. dans le forum GLUT
    Réponses: 5
    Dernier message: 02/12/2005, 20h50
  5. Réponses: 4
    Dernier message: 08/02/2005, 20h47

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