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 :

Comment interpréter cette déclaration


Sujet :

C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 199
    Points : 103
    Points
    103
    Par défaut Comment interpréter cette déclaration
    Bonjour à tous.

    Je suis en train d'étudier un exemple sur Qt et je cale sur une syntaxe.

    Voici le code de view.h :
    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
     
    #ifndef VIEW_H
    #define VIEW_H
     
    #include <QFrame>
    #include <QGraphicsView>
     
    QT_BEGIN_NAMESPACE
    class QLabel;
    class QSlider;
    class QToolButton;
    QT_END_NAMESPACE
     
    class View;
     
    class GraphicsView : public QGraphicsView               //Création d'une classe GraphicsView qui hérite de QGraphicsView
    {
        Q_OBJECT                                            //Macro Qt
    public:
        GraphicsView(View *v) : QGraphicsView(), view(v) { }
     
    protected:
    #ifndef QT_NO_WHEELEVENT
        void wheelEvent(QWheelEvent *) Q_DECL_OVERRIDE;     //Création d'une méthode surchargée de wheelEvent si compilation sans WheelEvent ?
    #endif
     
    private:
        View *view;                                         //Définition d'un pointeur de type View
    };
     
    class View : public QFrame
    {
        Q_OBJECT
    public:
        explicit View(const QString &name, QWidget *parent = 0);
     
        QGraphicsView *view() const;
     
    public slots:
        void zoomIn(int level = 1);
        void zoomOut(int level = 1);
     
    private slots:
        void resetView();
        void setResetButtonEnabled();
        void setupMatrix();
        void togglePointerMode();
        void toggleOpenGL();
        void toggleAntialiasing();
        void print();
        void rotateLeft();
        void rotateRight();
     
    private:
        GraphicsView *graphicsView;
        QLabel *label;
        QLabel *label2;
        QToolButton *selectModeButton;
        QToolButton *dragModeButton;
        QToolButton *openGlButton;
        QToolButton *antialiasButton;
        QToolButton *printButton;
        QToolButton *resetButton;
        QSlider *zoomSlider;
        QSlider *rotateSlider;
    };
     
    #endif // VIEW_H
    Dans la classe GraphicsView, je ne comprends pas la déclaration suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    public:
        GraphicsView(View *v) : QGraphicsView(), view(v) { }
    Pouvez-vous m'expliquer ce que signifient les deux points : , et que sont les membres QGraphicsView() et view(v) { } avec ces deux accolades comme s'il s'agissait d'une méthode ?

    Merci d'avance.

  2. #2
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Salut,

    c'est juste un constructeur et une liste d'initialisation. Rien de spécifique à Qt, c'est une des bases du langage C++.
    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.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 199
    Points : 103
    Points
    103
    Par défaut
    Merci Bousk. Des fois, on passe par de grands moments de solitude...

    C'est la façon dont tout ceci est écrit qui m'induit en erreur.

    En fait, si je comprends bien, le prototype et la définition du contructeur ne font qu'un (car il n'y a rien dans le fichier source) et cela est placé directement - et uniquement - dans l'entête ?

    Sans vouloir être (trop) scolaire cela équivaut à :

    dans le .h:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    public:
          GraphicsView(View *v);
    et dans le .cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    GraphicsView::GraphicsView(View *v)
              : QGraphicsView(), view(v)
    {
     
    }
    ?

  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
    plus ou moins.
    Au détail que dans le cas présent, c'est une fonction inline, tandis qu'elle est nécessairement non inline en passant par un fichier cpp.

    Les fonctions déclarées et définies dans la classe (dans sa définition, pour être scolaire) sont toujours implicitement inline.


    Et pour une template, tout mettre dans le .h est requis.
    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 émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Citation Envoyé par ternel Voir le message
    Les fonctions déclarées et définies dans la classe (dans sa définition, pour être scolaire) sont toujours implicitement déclarées inline.
    Rien ne garantit qu'elles seront effectivement inlinées (je pense que tu le sais, mais je le précise pour KonTiKI).

  6. #6
    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
    C'est une question de vocabulaire.

    La fonction (du code source) est inline: le mot clé ajouté implicitement pour chaque fonction définie entre les accolades de la définition d'un "class type" (class, struct).
    Par contre, c'est le mot clé inline qui n'impose pas que les appels à la fonction soient effectivement remplacé par le code correspondant (au lieu d'un appel de fonction)

    Mais la fonction est définie dans un header, et celui-ci est inclus dans plusieurs unités de compilation sans erreur de définitions multiples à l'édition des liens.
    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

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 199
    Points : 103
    Points
    103
    Par défaut
    Comme toujours, vos échanges sont très intéressants et ces précisions m'invitent à explorer ce concept

    Merci à vous tous pour cet éclairage qui illumine encore une partie de ce (très) long chemin de la programmation.

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

Discussions similaires

  1. Comment faire cette vue ?
    Par jibe74 dans le forum SQL
    Réponses: 3
    Dernier message: 21/10/2005, 16h30
  2. Comment passer cette ligne
    Par Atchoum_002 dans le forum Langage
    Réponses: 3
    Dernier message: 06/10/2005, 15h05
  3. Réponses: 7
    Dernier message: 19/07/2005, 08h31
  4. [débutant][JSci][Matrix]comment utiliser cette classe
    Par Clark dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 10/05/2005, 10h40
  5. [Delphi.NET][SDK] Comment interpréter System.Security.SecurityException?
    Par Laurent Dardenne dans le forum Delphi .NET
    Réponses: 4
    Dernier message: 07/04/2005, 12h43

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