Nous sommes actuellement le 13 Juil 2026, 18:04

Le fuseau horaire est UTC-5 heures [Heure d’été]




Publier un nouveau sujet Répondre au sujet  [ 4 message(s) ] 
Auteur Message
 Sujet du message: probleme C++
MessagePublié: 17 Nov 2003, 17:10 
Hors-ligne
Occasionnel
Occasionnel
Avatar de l’utilisateur

Inscription : 30 Avr 2002, 09:02
Message(s) : 152
Bonjour, voici:

J'ai deux classes:

class cPremClasse {
...
void fonction();
}

class cDeuxClass:public cPremClasse {
...
void fonction();
}

jusque la, ca va....

main()
{
cPremClasse *pClasse;

pClasse = (cDeuxClasse *)new cDeuxClasse();

pClasse->fonction(); // voici le probleme

delete pClasse;
}

Quand j'appelle la fonction 'fonction()', cela appelle la fonction de la classe 'cPremClasse '. Ca je peux comprendre. Mais puis-je appeler la fonction de la classe cDeuxClasse sans avoir a produire du code specifique?

Je m'explique: je ne veux pas utiliser les solutions a et b suivantes :
a)
((cDeuxClasse *)pClasse)->fonction();
b)
cDeuxClasse *pClasse;
pClasse->fonction();

Je veux que mon appel de fonction reste simple du genre :
- pClasse->fonction();
Tout en pouvant modifier le type de classe de mon pointeur dynamiquement ( lors la creation de la dite classe ).

Maintenant, ais-je ete clair? 8O Ensuite, avez-vous une idee? :?

_________________
---
Kaltar
Kaltar@yahoo.com
[...Reality is only a representation of your sense data which is always mixed with noise.]


Haut
 Profil  
Répondre en citant  
 Sujet du message:
MessagePublié: 17 Nov 2003, 17:21 
Hors-ligne
Toujours là!
Toujours là!
Avatar de l’utilisateur

Inscription : 08 Jan 2002, 14:51
Message(s) : 1337
Localisation : Québec
Ta fonction doit être virtuel. Par exemple:

Code :
class A
{
virtual void f();
}

class B : public A
{
virtual void f();
}

int main()
{
   A *pA;
   pA = new B;

   pA->f(); // f de B !!!
}


Tu étais très clair :D


Haut
 Profil  
Répondre en citant  
 Sujet du message: wow
MessagePublié: 17 Nov 2003, 17:32 
Hors-ligne
Occasionnel
Occasionnel
Avatar de l’utilisateur

Inscription : 30 Avr 2002, 09:02
Message(s) : 152
woo! :D

Reponse rapide, simple et exacte. Tu dois pas travailler chez .... une compagnie que je ne nommerai pas :P

C'est ca apprendre sur le tas.

Merci!

Comme a la fin de G.I.Joe, la petite scene de morale:
- Now we know!
- And knowing is half the battle...

_________________
---
Kaltar
Kaltar@yahoo.com
[...Reality is only a representation of your sense data which is always mixed with noise.]


Haut
 Profil  
Répondre en citant  
 Sujet du message:
MessagePublié: 18 Nov 2003, 14:51 
Hors-ligne
Toujours là!
Toujours là!
Avatar de l’utilisateur

Inscription : 08 Jan 2002, 14:51
Message(s) : 1337
Localisation : Québec
Petit ajout que j'avais oublié de mentionner, ton destructeur aussi doit-être virtuel. Voiçi pourquoi:

Code :
class A
{
public:
   A() {};
   ~A() {};
};

class B : public A
{
   int *pBuffer;

public:
   B() { pBuffer = new int[100]; };
   ~B() { delete []pBuffer; };
};

int main()
{
   A *pA;

   pA = new B;
   delete pA; // memory leak
}


Il y a un memory leak parce que le destructeur de B n'est pas appelé. C'est pourquoi le destructeur doit-être virtuel.


Haut
 Profil  
Répondre en citant  
Afficher les messages publiés depuis :  Trier par  
Publier un nouveau sujet Répondre au sujet  [ 4 message(s) ] 

Le fuseau horaire est UTC-5 heures [Heure d’été]


Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 1 invité


Vous ne pouvez pas publier de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum

Recherche de:
Aller vers :  
cron
Propulsé par phpBB® Forum Software © phpBB Group
Traduction et support en françaisHébergement de site