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 :

quelques questions sur le c++ et l'héritage


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut quelques questions sur le c++ et l'héritage
    Bonjour,

    j'apprend le c++ et j'ai 3 questions :

    1) Concernant le langage même je n'est pas compris l'héritage je crois : j'ai lu qu'une instance B de la classe CB héritant de la classe CA ne pouvait pas recevoir une instance de classe CA mais que A de classe CA pouvait recevoir B...Je pensais que c'étatit le contraire.

    2) L'intérêt de déclarer des variables private et non protected puisque protected est plus large (même si non indispensable).

    3) Ma deuxième question est loin de ça : j'ai pas mal codé en C avec GTK+ et j'ai vu qu'il existait gtkmm pour le c++, je recherche de bons tutoriaux.

    Là où mes deux questions (1 et 3) sont liés, c'est qu'en C/GTK+ je déclaré un Widget et je l'utilisé pour tous les widget (label, entry, window ...). Alors que d'après ce que j'ai compris ce n'est pas logique d'un point de vue classe...

  2. #2
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    1) Pas claire comme ca
    Montre du code, ca sera plus simple pour t'expliquer.

    2) Une variable protected est accessible aux classes dérivées mais reste néanmoins inaccessible depuis l'extérieur de la classe.

    3) Bien que Gtk++ soit un wrapper de GTK pour le C++, je ne peux que conseiller Qt à la place de celle ci.
    Mais si tu souhaite rester avec GTK, j'ai trouvé ceci :
    http://www.xgarreau.org/aide/devel/langtk/cpp_gtkmm.php
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  3. #3
    Membre émérite
    Avatar de mamelouk
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    867
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 867
    Par défaut
    Salut,

    je voudrais te donner un conseil d'ordre général, pose une seul question par post, sinon tu recevra moins de réponses (moi au début j'avais vraiment pas envie de tout lire et encore moins de te répondre)

    1) il faut se représenter l'héritage avec des images concrètes : un Animal (classe mère) peut etre un Chat ou autre chose, tandis qu'un Chat ne peut pas etre défini par juste "Animal".. Un Chat c'est une instance spécialisée d'Animal, et donc tu ne peut pas mettre une instance d'Animal dans une variable de Type, car il manquera des infos à cette variable pour etre complètement un chat.

    2) les variables private ne sont pas accessible aux classes filles, parfois c'est ce qu'on veut

    3) pareil que Davidbrcz. si tu code en C, utilise Gtk, si tu travaille en C++, plutot Qt. je ne me souviens plus de tout les problèmes que j'avais eu avec gtkmm, mais j'en avais bavé pour l'installation sous windows par exemple.

  4. #4
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut
    3) ok, je voulais utilisé GTK-- car sous gnome qt est moche mais bon, ce n'est pas le plus important.

    2) ok, moi je voyais les choses à l'envers alors.

    1) Un Animal ne peut pas être un Chat ça me semble logique mais c'est ce que j'ai lu. J'ai trouvé que seul les attributs en commun sont hérités ainsi que l'adresse ce qui me rassure un peu.

  5. #5
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    FULL HS : Je sais pas si c'est moi ou quoi mais je ne n'ai toujours rien compris à tes propos sur l'héritage et pourtant je l'ai bien relu 5 ou 6 fois ta phrase. Mais je n'y comprend vraiment rien .
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  6. #6
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut
    je vais tenter un bout de code (plus pour l'idée qu'autre chose) :

    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 Pere {
    ....
    }
     
    class Fils {
                      Fils(int n);
    }
    int main(void)
    {
                      Pere p;
                      F f(1);
                      p=f;
                      return 0;
    }
    Ce code est correct même si f a plus d'arguments que p, p=f revient à affecter l'adresse de f à p puis d'égaliser les attributs communs...d'après ce que j'ai compris, j'aimerais qu'on me le confirme.

  7. #7
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    Tu as ici un phénomène de slicing (perte d'information suite à convertion).

    Généralement, on ne manipule jamais par valeur les objets issues de hiérarchies où l'héritage sert à supporter une substituabilité.
    Une bonne pratique consiste à interdire affectations et copies dans les objets polymorphes, vu que souvent cela n'a aucun sens.

    En conclusion, utilises pointeurs et références.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

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

Discussions similaires

  1. Quelques questions sur les threads
    Par benj63 dans le forum C++Builder
    Réponses: 28
    Dernier message: 21/11/2005, 13h27
  2. Réponses: 19
    Dernier message: 21/10/2005, 19h24
  3. Quelques questions sur la mémoire
    Par Gruik dans le forum C
    Réponses: 6
    Dernier message: 17/11/2004, 14h38
  4. Quelques question sur Win 32 Appli
    Par lvdnono dans le forum Windows
    Réponses: 5
    Dernier message: 15/06/2004, 12h37
  5. Quelques questions sur le TWebBrowser...
    Par CorO dans le forum Web & réseau
    Réponses: 3
    Dernier message: 17/01/2003, 21h23

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