begin process at 2012 05 29 08:55:53
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Héritage multiple et reinterpret_cast


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Héritage multiple et reinterpret_cast

jeudi 4 mai 2006 à 17:08:04 | Héritage multiple et reinterpret_cast

vecchio56

Administrateur CodeS-SourceS
C'est une des premières fois que je me frotte à l'héritage multiple, et je me trouve devant un petit problème: Je prends un exemple très simple: class A {}; class B: public A {}; class C: public A {}; class D: public B, C {}; int main() { A* a = new D(); } Ce code me donne deux erreurs: error C2594: 'initializing' : ambiguous conversions from 'D *' to 'A *' error C2243: 'type cast' : conversion from 'D *' to 'A *' exists, but is inaccessible Par contre ca passe bien avec un reinterpret_cast A* a = reinterpret_cast(new D()); Je me demande si c'est bien comme ca qu'il faut faire, et que fait exactement ce reinterpret_cast? Merci
jeudi 4 mai 2006 à 17:22:54 | Re : Héritage multiple et reinterpret_cast

mogwai93

je dirais plutot qu'il faut rajouter virtual, comme ceci  (sinon tu te retrouves avec 2 instances de A lors de la creation de D)


class A{};

class B : public virtual A{};

class C : public virtual A{};

class D : public B, public C{};


pour reinterpret_cast : je connais pas.....
jeudi 4 mai 2006 à 17:24:53 | Re : Héritage multiple et reinterpret_cast

mogwai93

j'oubliais :
c'est D qui hérite de A pas l'inverse , d'où le message : "exists, but is inaccessible"
jeudi 4 mai 2006 à 17:27:26 | Re : Héritage multiple et reinterpret_cast

vecchio56

Administrateur CodeS-SourceS
En fait ma classe A ne contient aucune donnée. Du coup ca change quelque chose?
jeudi 4 mai 2006 à 17:38:37 | Re : Héritage multiple et reinterpret_cast

mogwai93

ton code :
[ Lien ]

ce que je te propose :
[ Lien ]

pour ton test, ca ne change pas grand chose , juste un peu + de memoire utilisée...
par la suite ca peut gener, car tu peux toucher l'une des 2 classes A
jeudi 4 mai 2006 à 17:38:46 | Re : Héritage multiple et reinterpret_cast

vecchio56

Administrateur CodeS-SourceS
En fait, ma hiérarchie est un peu différente: E hérite de C et D D hérite de B B et C héritent de A Du coup, quels héritagent doivent être virtuels?
jeudi 4 mai 2006 à 17:48:39 | Re : Héritage multiple et reinterpret_cast

mogwai93

Réponse acceptée !
pour ton dernier exemple : (tu obtiens donc un pentagone avec une lettre à chaque angle)

on obtient donc :
class A{};

class B : public virtual A{};

class C : public virtual A{};

class D : public B {};

classe E : public D, public C{};


tu mets virtual sur pour les classes qui sont susceptibles d'etre en double lors de l'instanciation de la classe finale (ici E)
jeudi 4 mai 2006 à 17:56:03 | Re : Héritage multiple et reinterpret_cast

vecchio56

Administrateur CodeS-SourceS
OK, merci beaucoup (juste à la fin, tu voulais dire A, pas E, non?)
jeudi 4 mai 2006 à 18:44:29 | Re : Héritage multiple et reinterpret_cast

mogwai93

non, E !

car c'est quand tu vas instancier E que tu risques d'avoir 2 A  (si tu ajoutes ou non "virtual")

jeudi 4 mai 2006 à 18:46:02 | Re : Héritage multiple et reinterpret_cast

vecchio56

Administrateur CodeS-SourceS
Ah oui d'accord, je pensais que tu parlais de la classe pouvant être en double

1 2

Cette discussion est classée dans : class, cast, héritage, multiple, reinterpret


Répondre à ce message

Sujets en rapport avec ce message

dynamic_cast ne marche pas sous Visual C++ !! [ par feanor11 ] La fonction de cast dynamic_cast ne marche pas sous Visual C++ 6.0, alors qu'elle marche très bien sous Dev C++. #include #include using namespace template et l'héritage [ par imad_lol ] salut.dans mon programme je déclare 2 classe X et Y.les 2 classe sont des classes templates et Y hérite de X :template class X{ };//****************** Objet : problème héritage [ par jeremie064 ] Bonjour à tous,Je suis débutant en c++ et un problème d'héritage se pose à moi.Voici mon code simplifié :dans un .h j'ai :   class A   {      public:  Pb de Multi héritage [ par bach58 ] Je veux définir une classe Z qui hérite d'une autre classe A par deux voies différentes :class A{ int a; ....}class X:A ..{..}class Y:A... {...} template et héritage [ par cybermax62 ] j'ai un problème de fond dans ma conception. Je voudrais utiliser une classe template de base Singleton avec des classes héritées (plusieurs fois). Le Utilisation d'un reinterpret_cast ? [ par romain60112 ] Bonjour, J'ai un petit soucis de conversion, voici mon problème : CString m_tempsminz1; unsigned long int Zone1; // de 0 à FF FF FF unsigned long in Heritage et cast [ par LordBob ] Bonsoir a tous,voila en fait j'ai deux classes comme ceci:class CEnvironnement{ ... }class CInterieur : public CEnvironnement{ ... }en fait apres j'ai utilisation de "this.*" et class sous c++ [ par gluff ] bonjour,Je n'arrive pas a compiler ce programme a cause de l'utilisation des "this." en particulier a la ligne : erreur de compilation :  vecteur si n MyExcel , execution multiple imposible [ par benjamin_31 ] Bonjours, MyExcel => http://www.cppfrance.com/codes/AUTOMATION-EXCEL-ENTIEREMENT-WIN32-SOUS-FORME-CLASSE_44276.aspx j'utilise actuellement la classe


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 5,772 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales