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

Visual C++ Discussion :

[h�ritage] Probl�me de cast


Sujet :

Visual C++

  1. #1
    Membre confirm�
    Inscrit en
    Mai 2006
    Messages
    212
    D�tails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 212
    Par d�faut [h�ritage] Probl�me de cast
    Salut tout le monde,

    J'ai un probl�me en ce qui concerne l'h�ritage. J'ai une classe m�re CServer et une classe fille CBackup et j'ai besoin de convertir CServer en CBackup.
    Est ce possible?


    Merci d'avance.

  2. #2
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Que veux-tu dire EXACTEMENT par "convertir CServer en CBackup" ?
    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
    Membre confirm�
    Inscrit en
    Mai 2006
    Messages
    212
    D�tails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 212
    Par d�faut
    En fait, j'ai une troisi�me classe (COther) qui contient la classe CServer. La classe COther contier une fonction qui selon le type du serveur (Master ou backup) doit pouvoir acc�der aux membres de la classe CServer et de la classe CBackup.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Class COther
    {
    public:
    CServer Server;
    int ServerType;
    public:
    COther(CServer *server);
    int MyFunction();
    }

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    int COther::MyFunction()
    {
    if(ServerType == 1)
    {
    //Some code
    }
    else
    {
    //Ici je dois pouvoir accèder à des membres de la classe fille
    }
    }

    Comment puis je faire cela?

  4. #4
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Si tu es s�r de ton coup, un simple static_cast< CBackup * >(Server) suffit.
    Sinon, tu peux utiliser un dynamic_cast et v�rifier que le pointeur retourn� n'est pas NULL.


    PS: Cela ressemble fort � une erreur de conception. Pourquoi ne pas utiliser une fonction membre virtuelle dans CServer et CBackup ?
    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.

  5. #5
    Membre confirm�
    Inscrit en
    Mai 2006
    Messages
    212
    D�tails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 212
    Par d�faut
    Je vais essayer la m�thode que tu as propos�.

    En fait, je peux �liminer la troisi�me classe, elle pr�sente d'autres fonctionnali�s et c'est tout une autre histoire.

  6. #6
    Membre confirm�
    Inscrit en
    Mai 2006
    Messages
    212
    D�tails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 212
    Par d�faut
    �a marche, merci.
    Tu pourrais m'expliquer, c quoi au juste cette commande?

  7. #7
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Pour �a, je me vois oblig� de te dire de relire ton cours de C++ : Les op�rateurs de forcage de type font partie du langage lui-m�me.

    Ce que je peux dire, c'est qu'il y en a des plus permissifs que d'autres, notamment pour convertir un pointeur en un autre.
    • Le cast de type C ("C-Style cast") et son extension C++ ("Function-Style cast") sont les plus permissifs: ils permettent de convertir tout en n'importe quoi : Flottant en entier, entier en pointeur, pointeur d'un type � l'autre, pointeur const en non-const, etc.
    • Le static_cast est le moins permissif: Il permet de convertir les types d'entiers entre eux, il peut convertir un void* en (n'importe quel type)*, ou un CBase* en CDerivee * (la conversion dans l'autre sens �tant implicite et n'ayant donc pas besoin de cast). On ne peut PAS convertir un pointeur const en pointeur non-const.
    • Le dynamic_cast ne peut (ou ne doit) s'utiliser que sur des pointeurs d'objets: Il sert justement � convertir un CBase* en CDerivee* (ou d'autres conversions du m�me tonneau) mais retourne un pointeur NULL si l'objet point� n'est pas du bon type. C'est un peu plus lent qu'un static_cast, par contre.
    • Le reinterpret_cast est plus permissif que le static_cast, je crois qu'il permet toutes les conversions SAUF pointeur const en pointeur non-const.
    • Le const_cast permet de convertir un pointeur const en pointeur non-const. Son utilisation doit rester exceptionnelle, surtout pour un d�butant.


    Pour �viter les erreurs, on utilise les op�rateurs les moins permissifs possibles. Quand on programme en C++, le cast de type C est � bannir.
    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.

  8. #8
    Membre confirm�
    Inscrit en
    Mai 2006
    Messages
    212
    D�tails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 212
    Par d�faut
    Je me rappelle avoir lu �a quelque part merci bcp

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 20
    Dernier message: 04/01/2007, 11h43
  2. [JDBC Driver][JSTL] Probl�me de cast de donn�es
    Par GyLes dans le forum PostgreSQL
    R�ponses: 1
    Dernier message: 27/09/2005, 10h00
  3. probl�me de cast!
    Par LaseLiep dans le forum Langage
    R�ponses: 3
    Dernier message: 03/06/2005, 09h30
  4. R�ponses: 1
    Dernier message: 06/12/2004, 16h46
  5. [C#] Probl�me de casting de @IDENTITY
    Par bilb0t dans le forum Acc�s aux donn�es
    R�ponses: 7
    Dernier message: 03/09/2004, 09h42

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