Bienvenue sur JeuxOnLine - MMO, MMORPG et MOBA !
Les sites de JeuxOnLine...
 

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

C++ besoin d'explication

Par Diacre le 12/4/2002 à 5:41:39 (#1272374)

KK'un pourrait avoir l'aimable gentillesse de m'expliquer a quoi servent les classes virtuelles / classes abstraites ?

Je n'arrive pas a voir l'interet par rapport a l'utilisation d'une simple classe de base et d'une dérivée.

Je crois que ca a son sens quand on commence a programmer des classes de base dupliquée...
Mais sans plus.

:maboule:
Et ca me rend dingueeee de pas comprendre.

Par Homer le Grand le 12/4/2002 à 8:51:20 (#1272574)

En langage objet : une classe virtuelle est une classe ou tu ne fais que déclarer tes méthodes mais tu ne les implémentes pas dans ta classe. Tu peux le faire ensuite dans d'autres classes par héritage de classe. C'est trop puissant cette notion !!!
Si tu veux plus d'aide : des vrais gars qui savent tout :
Francedev

Par krisae le 12/4/2002 à 13:03:38 (#1273565)

La classe abstraite ressemble beaucoup à la définition donnée par Homer.

La différence est que si tu crées une classe héritant d'une classe abstraite, tu es obligé de définir les méthodes déclarés abstraites par ta classe mère...

Un petit exemple vaut mieux qu'un grand discours..


public abstract class Vivant {

public abstract void communiquer() {
}
}



Si maintenant je veux creer une class "chien, chat, humain" qui hérite de vivant..il me faudra définir obligatoirement la méthode "communiquer"..

public class Chien extends Vivant {
public void communiquer() {
aboyer();
}

public void aboyer() {
blablablablabal
}
}



voili voilou... :)

Par Dreadskulo le 12/4/2002 à 17:47:50 (#1274951)

ouais enfin c est un peu vague de mettre abstract sur la classe comme ca pour comprendre

Moi perso je n ai que quelque methodes dans la classe qui ont besoin d etre virtuelles et je n ai besoin de mettre que "virtual" devant celle qui m interressent et pas devant la classe ( qui ne pourrait pas de toute facon vu que certaines methodes sont definies )

L interet donc comme il a deja ete dit c est surtout d avoir des methodes definies pour chaque classe derivee et qui ont le meme nom et la meme liste de parametres ( pour ceux qui allaient me sortir que suffisait de faire de l overloading )

Par Diacre le 12/4/2002 à 20:54:22 (#1276060)

je vais vous donner un exemple
je c ce qu'est une classe virtuelle , mais je pige pas son utilité.
---------------------------------------------------------------
class forme
{
...
public:
void shape ();
void trace();
};

class rectangle : public forme
{
...
};
-----------------------------------------------------------------
class forme // classe abstraite
{
public:
virtual void shape () = 0;
virtual void trace () = 0;
};

class rectangle : public forme
{
public:
void shape ();
void trace ();
};
------------------------------------------------------------------

Ces 2 exemples font la meme chose au final.
Mais QUAND faut il utiliser obligatoirement une fonction virtuel et pkoi...
c'est ca la question :)
M'enfin.

Par Dreadskulo le 12/4/2002 à 22:17:49 (#1276436)

y a pas d OBLIGATION a utiliser de fonction virtuelle

L interet il est LA:

Class CShape{

//variables
public:

variables

//fonctions
public:

virtual void Draw();
}

Class CCircle : public CShape{

void Draw(){ blablabla }
}

Class CRect : public CShape{

void Draw(){ bliblibli }
}

Comme tu peut le voir si tu utilises Draw avec un cercle ca fera blablabla et avec Rect ca fait bliblibli


Voila pour l exemple
Donc l interet c est de definir une classe generique avec des variables des fonctions et tout le toutim qui fonctionne comme d hab et de definir des classes Heritees ou certaines fonctions ( virtuelles dans la classe Generique ) se comporteront differemment selon la classe ou tu l appelles .........et NON ce n est pas de l overloading puisque le nom et la liste de parametre de la fonction apellee sont les meme

C est clair la ou pas ?? :maboule:

Par Diacre le 12/4/2002 à 23:22:30 (#1276803)

j ai revu mon probleme...

En fait , j avais pas vu un ptit truc ds le programme.

Class windown_border : public virtual window

Et la ca change tout: Evite les erreurs d'ambiguité dans la compilation d'une classe dupliquée.

Merci de m'avoir répondu :D

JOL Archives 1.0.1
@ JOL / JeuxOnLine