Votre question

Interfaces en c++ et methodes virtuelles pures

Tags :
  • Composants
  • Programmation
Dernière réponse : dans Programmation
10 Février 2008 13:44:11

Bonjour tout le monde,
je débute en c++ et j'ai quelques soucis en ce qui concerne l'utilisation d'interfaces! tout d'abords quelle est la définition précise de la notion d'interface sous c++? Les methodes doivent elles etre toutes pures? l'interface doit elle contenire un constructeur(destructeur)? Comment l'implementer (fichier .h autre .cpp comme pour une classe objet) ?

Si quelqu'un a un exemple complet d'interface ca m'aiderait ennormément!!!

Merki

Autres pages sur : interfaces methodes virtuelles pures

10 Février 2008 14:26:59

C'est la première fois que j'utilise ce forum je ne sais pas si ma question est innapropriée!! j'ai pas encore eu de réponse alors qu'apparement ca va vite!
a b L Programmation
10 Février 2008 15:45:50

En C++, la notion d'interface n'existe pas vraiment. C'est en Java que cette notion a été introduite pour éviter de gérer l'héritage multiple.
Parles-tu d'interface au même sens que java ou interface IDL pour composants (COM/DCOM/ActiveX ou CORBA) ?

Si c'est plus implémenter une interface comme en Java, il faut créer une classe abstraite mais dont toutes les méthodes sont virtuelles pures.
Ne mets pas de constructeurs/destructeurs, il y a le constructeur par défaut. De toutes façons, si tu gère ça comme une interface, tu ne dois pas mettre de code dedans, et comme c'est une classe abstraite, le compilateur ne te laisserait pas compiler une instanciation de ton interface.

pour rendre la classe abstraire il te faut une méthode virtuelle (avec le mot-clé "virtual") pure (avec "= 0;" à la fin de la déclaration). Tu peux faire un .cpp qui ne fait qu'un include du .h (pour le compiler), où tu peux aussi t'en passant puisque tu n'y mettras rien dedans.
Contenus similaires
Pas de réponse à votre question ? Demandez !
10 Février 2008 15:56:46

Merci, c'etait en effet une reference aux interfaces Java! quand je cree une classe heritée d'un objet interface j'obtiens l'erreur du compilateur suivant:

C:\Documents and Settings\Administrateur\Bureau\TP\MonteCarloOptionPricer.o(.text$_ZN13IOptionPricerC2Ev[IOptionPricer::IOptionPricer()]+0x8) In function `ZNK9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEplERKi':

[Linker error] undefined reference to `vtable for IOptionPricer'

pourtant j'ai bien rajouté les fichiers dans la liste des fichiers du projet: je travaille sous Dev-C++!!
10 Février 2008 16:24:09

problème résolu !! merci
Anonyme
7 Janvier 2010 23:09:23

résolu comment ?? :??: 
a b L Programmation
8 Janvier 2010 20:02:33

Je pense que c'était un problème lors de l'édition des liens. Il n'avait certainement pas mis la référence à la bibliothèque dans les options du linker.
23 Mai 2012 13:57:07

La notion d'interface n'est pas propriétaire C++, ADA Ou Java. En java, c'est vrai que le mot clés interface existe mais tu peux créer tes interfaces dans ton C++. Une interface défini les méthodes qu'une classe, un composant ou un logiciel veut présenter (dans le sens rendre accessible) à l'extérieur, sur le "middleware". Le mot clés interface existe en JAVA, c'est vrai, avec interface, tu définiras une classe abstraite ou les méthodes sur implémenter dans la classe " implémentant " celle-çi. En C++, pour programmer une interface défini une classe "virtuel pure" avec comme pense bete un nom commençant par Itf, par exemple:
abstract class ItfMoteur{
protected int accélérer(int val);
protected int freiner(int val);
protected bool debrayer(bool apuyer);
}
je t'ai mis des valeur un peu à l'arrache mais c'est le principe et pour l'implémentation tu défini une classe fille et tu implémente ces méthodes à ta sauces.
public class Moteur extends itfMoteur{
public Moteur(){}
int accélérer(int val){
vitesse=vitesse+val
}
}
Je te fournirais bien un exemple plus concret, mais je n'ai pas le temps.

a b L Programmation
24 Mai 2012 20:23:20

Oui, mais attention de ne pas en abuser, car pour moi, utiliser des interfaces (au sens Java) en C++ est une erreur de conception.
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS