[C++]Fonctions virtuelles

Fonctions virtuelles [C++] - Programmation

Marsh Posté le 06-09-2001 à 12:41:26    

Salut!
 
J'ai 3 classes, A, B, C. B et C sont des filles de A et les 2 contiennes une fonction membre qui doit retourner le même type de valeure:
 
class B : public A
{
private:
int x;
public:
int Get() {return x;}
};
 
class C : public A
{
private:
int y;
public:
int Get() {return y;}
};
 
voila et dans mon main j'aimerai que lorsque une instance de B ou C appel la fonction Get() ca me retourne x pour B et me retourne y pour C.
Ca dit que Get() est embigu lors de la compilation. J'ai essayé de mettre le mot clé virtual devant les 2 fonctions mais ca change rien.
Dois-je vraiment utiliser des fonction virtuelles? Sinon j'ai pas pigé a quoi ca sert...
 
A+!

 

[edtdd]--Message édité par bkadoum--[/edtdd]

Reply

Marsh Posté le 06-09-2001 à 12:41:26   

Reply

Marsh Posté le 06-09-2001 à 13:59:27    

virtual sert à redefinur une fonction qui déja définie dans une classe de base
 
class A
{
 public:  
  virtual int fonction(){ return 0;}
};
 
class B : public A
{
 public
  virtual int fonction(){ return 1;}
};  
 
Apparement dans ton cas il n'y en a pas besoin ( si la fonction Get n'est pas définie dans A) .
Sinon ton code semble correct, comment tu utilises la fonction ?

Reply

Marsh Posté le 06-09-2001 à 14:46:04    

Oui précise comment tu définis A et comment tu appeles Get() car effectivement ça devrait marcher.. :)


---------------
Athlon64 s754 10*200MHz - R9800Pro - 512MB DDR200MHz - ZX6RR - Q2[SupOp] - Tutorial Video: multilangues, multisstitres
Reply

Marsh Posté le 06-09-2001 à 14:57:00    

arf j'ai encore voulu simplifier mon code et j'ai enlevé le problème. En effet j'ai pas definit la fonction Get() dans A, je voulais qu'elle soit uniquement dans B et C. Le problème c'est que j'ai une autre classe D qui hérite de B et C et j'appelais Get() depuis une instance D donc ca foirait. La j'ai regroupé B et C ensemble j'ai plus qu'une fonction Get(), ca fait moin propre mais ca marche.

Reply

Marsh Posté le 06-09-2001 à 15:05:36    

bkadoum a écrit a écrit :

arf j'ai encore voulu simplifier mon code et j'ai enlevé le problème. En effet j'ai pas definit la fonction Get() dans A, je voulais qu'elle soit uniquement dans B et C. Le problème c'est que j'ai une autre classe D qui hérite de B et C et j'appelais Get() depuis une instance D donc ca foirait. La j'ai regroupé B et C ensemble j'ai plus qu'une fonction Get(), ca fait moin propre mais ca marche.  




Ah! l'heritage multiple... source de multiples erreurs...

Reply

Marsh Posté le 06-09-2001 à 16:02:48    

BENB a écrit a écrit :

 
Ah! l'heritage multiple... source de multiples erreurs...  




 
Tout a fait d'accord!  :D

Reply

Marsh Posté le 06-09-2001 à 17:24:31    

ca fait bpc de truc pour une si petite classe...

Reply

Marsh Posté le 06-09-2001 à 22:59:57    

vu la définition de tes classes, ça m'étonne pas que le compilateur te dise d'aller te faire voir :D

Reply

Marsh Posté le 06-09-2001 à 23:01:22    

t'as 2 fonctions qui ont le même nom... Comment veux-tu que le compilateur sache la bonne fonction à appeler (celle que tu veux) dans tel ou tel cas??? il est pas devin :)

Reply

Marsh Posté le 07-09-2001 à 09:52:58    

rufo a écrit a écrit :

t'as 2 fonctions qui ont le même nom... Comment veux-tu que le compilateur sache la bonne fonction à appeler (celle que tu veux) dans tel ou tel cas??? il est pas devin :)  




 
ben si c pas la même classe

Reply

Marsh Posté le 07-09-2001 à 09:52:58   

Reply

Marsh Posté le 07-09-2001 à 09:57:58    

mr_mat a écrit a écrit :

 
 
ben si c pas la même classe  




 
oui mais tes fcts elles ont:
- même nom
- même type de retour
- même prototype...
 
Tu devrait faire une classe abstraite C  (avec le prototype de ta methode get) de laquelle derive A et B, et tu implementes ta methode dans ces 2 classes -> plus de pb!

Reply

Marsh Posté le 07-09-2001 à 13:42:59    

mr_mat a écrit a écrit :

 
 
ben si c pas la même classe  




Ben si, une fois que tu as fais ton heritage multiple, elle se retrouvent toutes les deux dans la meme classe...
 
Pour que ton truc marche il faut definir la methode virtuelle dans A, B et C heritent virtuellement de A
D herite de B et de C et redefinit la methode...

Reply

Marsh Posté le 07-09-2001 à 13:58:09    

j'avit paas vu qu'il faisait de l'héritage multiple.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed