Interface en C++ (non graphique ! )

Résolu/Fermé
betsprite - 11 janv. 2010 à 08:14
 betsprite - 11 janv. 2010 à 12:43
Bonjour tout le monde,

J'apprends en ce moment le C++ et j'aimerais trouver un tutoriel pour apprendre à gérer les interfaces.

Quand je parle d'interfaces, ce n'est pas les interfaces graphiques ! (on voit que ça en faisant une recherche :s).
L'interface comme je l'entends c'est une class de prototypages de fonctions ...

Si jamais vous connaissez un bon tuto traitant de cet aspect de la POO en C++ je vous en remercirais !

Bonne journée !

4 réponses

Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
11 janv. 2010 à 09:20
Es tu sur du nom en C++ ?
Essai "classe abstraite" peut être.
0
En fait le concept d'interface, je l'ai appris avec la POO en Java mais ce n'était pas pareil que classe abstraite ou héritage qui sont d'autres notions...

En Java, la classe abstraite permet de faire une classe avec des méthodes communes.
L'héritage c'est encore autre chose et l'interface c'est un ensemble de ptototypage de méthodes et l'interface ne peut pas etre instancier.

En fait je pense pas mélanger ces différentes notions mais peut être qu'en langage C++, le concept d'interface proprement dit n'existe pas ...

Qu'en pensez-vous?
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
11 janv. 2010 à 10:12
Je pense qu'il ne faut pas essayer d'appliquer en C++ ce que tu as appris en JAVA.
Maintenant, ça me reviens, ce qu'il y a de plus proche d'une interface JAVA en C++ c'est une classe abstraite pure.
En C++ une classe abstraite est une classe ayant des méthodes et fonctions (donc des prototypes) elle est dite virtuel pure (ou abstraite) lorsqu'aucune ne reçoit de définition et virtuelle simple si au moins une méthode n'a pas de définition. Pour moi ça correspond à la définition que tu donnes d'interface. Une classe abstraite ne peux donner directement d'objet (d'instance en JAVA)
Par exemple :
class A
{
  virtual double tt()=0;
  virtual void affiche()=0;
};
class B
{
  virtual double abv();//return 534.2 par exemple
  virtual void affiche()=0;
};
B b;//erreur
A a;//erreur

A est une classe abstraite ou virtuel pur et B est une classe virtuel. Les variable "a" et "b" ne peuvent être déclarer car les classes A et B ont au moins une méthode mise à 0.
je ne suis plus certain à 100% des noms, mais en gros c'est ça.
0
D'accord merci pour cette précision. Donc du coup si par exemple en C++ on essai de faire une "interface comme en Java" disons l'interface "véhicule" ayant les méthodes : freiner, accélerer, démarrer,
en C++ cette "interface" sera une classe abstraite ou virtuelle pure ?

Mais comment doit-elle se coder ? (sur l'exemple de "l'interface Java vehicule" )
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
11 janv. 2010 à 10:44
Je ne connais pas assez bien JAVA.
class vehicule
{
   virtual void freiner() =0;
   virtual void accelerer()=0;
   virtual void demarrer()=0;
}

Et ensuite dans un .h :
class renault : public vehicule
{
  void freiner();
  void accelerer();
  void demarrer();
}

et dans le .cpp :
void renault::freiner()
{...}
void renault::accelerer()
  {...}

ensuite, lorsque tu fais des pointeurs sur vehicule tu appeleras la méthodes renault::freiner() ou peugeot::freiner() en fonction de l'objet réellement pointé.
0
Ok trés bien je commence à comprendre.

Et comment sa se passe avec le main et l'utilisation des pointeurs ?

Exemple dans le main on veut instancier une renault avec un pointeur ... ( il faut un main.h et main.cpp avec une méthode qui va créer la renault non ? ça se passe comment ?)
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
11 janv. 2010 à 11:58
pas de main.h (c'est l'exception)
Le mieux c'est de faire un exemple.
#include "renault.h"
#include "peugeot.h"// vehicule.h est logiquement inclus dans ces fichiers, pas la peine de l'ajouter.
véhicule* tab[N];//tableau de N pointeurs sur véhicule
renault v1,v2;
peugeot p1,p2,p3;
int main()
{
  tab[0]=&v1;
  tab[1]=&v2;
  tab[2]=&p1;
  tab[3]=&p2;
  tab[4]=&p3;
  for (int n=0;n<N;++n)
     tab[n]->freiner();
  return 0;
}
0
Ok merci beaucoup pour cette explication rapide ;)

Je comprend mieu le concept maintenant !

Merci encore ! bonne journée ;)
0