Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
872 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Vous n'avez pas d'interfaces, en C++ ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Vous n'avez pas d'interfaces, en C++ ?

n°1674658
Eniac
Da Mourfis' King
Posté le 21-01-2008 à 19:11:42  profilanswer
 

Hello,
 
Après 4 ans de Java je dois me remettre [définitivement :whistle: ] à C++  
 
Première question: vu qu'on n'a pas de notions d'interface en C++, comment fait-on ?
 
Est-on supposé hériter deux objets d'une superclasse abstraite qui définierait uniquement les méthodes abstraites ?
 
Ca ne me parait pas "naturel"  :??:  
 
Pour reprendre un exemple lu sur un forum, la classe Homme peut réaliser l'interface Chasseur (j'observe ma cible, je la trouve, je l'abbat etc...). Mais ces fonctions, un Missile aussi peut le faire. Alors que par nature Homme hérite de Animal et Missile de Machine.
 
Merci,
Eniac

Message cité 1 fois
Message édité par Eniac le 21-01-2008 à 19:11:57
mood
Publicité
Posté le 21-01-2008 à 19:11:42  profilanswer
 

n°1674659
masklinn
í dag viðrar vel til loftárása
Posté le 21-01-2008 à 19:14:18  profilanswer
 

Eniac a écrit :

Première question: vu qu'on n'a pas de notions d'interface en C++, comment fait-on ?
 
Est-on supposé hériter deux objets d'une superclasse abstraite qui définierait uniquement les méthodes abstraites ?


Oui.

Eniac a écrit :

Ca ne me parait pas "naturel"  :??:


Parce que ça ne t'a pas été enseigné comme ça.
 
Les interfaces java ont été créées spécialement pour java pour compenser l'absence d'héritage multiple [:spamafote]  

Eniac a écrit :


Pour reprendre un exemple lu sur un forum, la classe Homme peut réaliser l'interface Chasseur (j'observe ma cible, je la trouve, je l'abbat etc...). Mais ces fonctions, un Missile aussi peut le faire. Alors que par nature Homme hérite de Animal et Missile de Machine.


J'ai rien compris [:petrus75]
 
Mais si ça peut aider, en java aussi, si ça m'amuse je peux faire hériter une classe Pingouin d'une classe CharAVoile [:petrus75]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1674660
IrmatDen
Posté le 21-01-2008 à 19:15:18  profilanswer
 

Salut,
 
Non la notion d'interface n'est pas builtin. Par contre, tu peux créer une classe composée uniquement de méthodes abstraites.
 
Dans ton exemple, je dirais plutôt que Homme aggrége le comportement Chasseur plutôt qu'en hériter. Ainsi, tu peux facilement changer le comportement d'une personne de Chasseur à Pêcheur, alors que l'héritage te limite à un comportement statiquement.

n°1674666
masklinn
í dag viðrar vel til loftárása
Posté le 21-01-2008 à 19:18:45  profilanswer
 

IrmatDen a écrit :

Salut,

 

Non la notion d'interface n'est pas builtin. Par contre, tu peux créer une classe composée uniquement de méthodes abstraites.


[:pingouino]

 

C'est exactement ce qu'il a mentionné dans son post [:prozac]

 

edit: par contre +1 sur le reste, la composition saÿ le bien :o

Message cité 1 fois
Message édité par masklinn le 21-01-2008 à 19:19:23

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1674678
Eniac
Da Mourfis' King
Posté le 21-01-2008 à 19:27:28  profilanswer
 

masklinn a écrit :

Mais si ça peut aider, en java aussi, si ça m'amuse je peux faire hériter une classe Pingouin d'une classe CharAVoile [:petrus75]


 
Pinguouin et CharAVoile pourraient implémenter une méthode "battreDeLAile()"  :)  
 
Mais comme l'implémentation de ces méthodes n'a rien avoir l'une avec l'autre, et que ces objets n'ont rien d'autre en commun (tout du moins, supposons-le), en Java, il ne me serait jamais venu à l'idée de les faire hériter d'une classe (même abstraite avec méthodes abstraites).
 
J'aurais dit
- Pinguoin implements TrucQuiPeutBattreDeLAile
- CharAVoile implements TrucQuiPeutBattreDeLAile
Et si on avait d'autres animaux et d'autres véhicules, on aurait même dit
- Pinguoin extends Animal implements TrucQuiPeutBattreDeLAile
- CharAVoile extends Vehicule implements TrucQuiPeutBattreDeLAile
 
En C++, je suis donc sensé faire ceci ?
- Pinguoin extends Animal, TrucQuiPeutBattreDeLAile
- CharAVoile extends Vehicule, TrucQuiPeutBattreDeLAile
avec  
TrucQuiPeutBattreDeLAile déclarée comme abstraite ?
 
Ca ne me parait vrrrrrrraiment pas naturel :p
 

n°1674684
IrmatDen
Posté le 21-01-2008 à 19:46:02  profilanswer
 

masklinn a écrit :

[:pingouino]

 

C'est exactement ce qu'il a mentionné dans son post [:prozac]


Bah vu que son post commençait par une question suivie d'une supposition, je me suis dit que j'allais confirmer :D (Edit: Euh, le non était en trop; le travail c'est mal... :s)

 
Eniac a écrit :

Pinguouin et CharAVoile pourraient implémenter une méthode "battreDeLAile()"  :)


La vache, les exemples! La drogue, c'est mal [:petrus75]

 
Eniac a écrit :

Mais comme l'implémentation de ces méthodes n'a rien avoir l'une avec l'autre, et que ces objets n'ont rien d'autre en commun (tout du moins, supposons-le), en Java, il ne me serait jamais venu à l'idée de les faire hériter d'une classe (même abstraite avec méthodes abstraites).

 

J'aurais dit
- Pinguoin implements TrucQuiPeutBattreDeLAile
- CharAVoile implements TrucQuiPeutBattreDeLAile
Et si on avait d'autres animaux et d'autres véhicules, on aurait même dit
- Pinguoin extends Animal implements TrucQuiPeutBattreDeLAile
- CharAVoile extends Vehicule implements TrucQuiPeutBattreDeLAile

 

En C++, je suis donc sensé faire ceci ?
- Pinguoin extends Animal, TrucQuiPeutBattreDeLAile
- CharAVoile extends Vehicule, TrucQuiPeutBattreDeLAile
avec
TrucQuiPeutBattreDeLAile déclarée comme abstraite ?

 

Ca ne me parait vrrrrrrraiment pas naturel :p


Dans le principe la comparaison, oui c'est ça; mais l'héritage est (généralement; il y a toujours les contre-exemples :)) à éviter lorsque la composition est possible; et c'est encore plus vrai pour l'héritage multiple. Je t'invite à aller lire cette page de la FAQ C++ qui devrait expliciter un peu la notion d'héritage multiple en C++.


Message édité par IrmatDen le 21-01-2008 à 20:07:18
n°1674687
Eniac
Da Mourfis' King
Posté le 21-01-2008 à 19:59:04  profilanswer
 

OK merci !
 
Elle est bien fouttue cette FAQ ; mais je préfère mes exemples ;)
 
A+

n°1674702
nargy
Posté le 21-01-2008 à 20:44:36  profilanswer
 

Ya pas de distinction nette entre implements et extends, l'héritage multiple permet toutes les combinaisons. Si une classe ne possède aucune fonction virtuelle pure elle peut être instanciée. Si elle en contient, c'est une classe abstraite, celà peut s'apparenter à une interface dont certains membres peuvent déjà avoir été implémentés, et aucun objet ne peut être instancié puisque la définition de la classe est incomplète.
 
Étant donné Chasseur, Pecheur, Humain, Animal, Machine et TrucQuiBatDeLAile:
Homme: Humain, Chasseur, Pecheur
Missile: Machine, Chasseur
Pinguoin: Animal, Pecheur, TrucQuiBatDeLAile
CharAVoile: Machine, Pecheur, TrucQuiBatDeLAile
 
L'héritage multiple permet aussi:
HommeCanon: Homme, Missile
... où il faut préciser quelle méthode de chasse on utilise.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Vous n'avez pas d'interfaces, en C++ ?

 

Sujets relatifs
Logiciel pour design des interfaces fictives[Résolu] Application avec multiples interfaces graphiques
[C#] [Résolu] Comment communiquer avec une dll c++[C] Des accolades "just pour le fun" ?
Problème Axis/Java/Web ServicesRéalisation d'interfaces graphiques en C
Interfaces et propriétés : les limitesProgrammation Interfaces Graphiques : questions
recherche de doc sur les objets/interfaces nativesUtilité des interfaces
Plus de sujets relatifs à : Vous n'avez pas d'interfaces, en C++ ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR