Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1049 connectés 

  FORUM HardWare.fr
  Programmation

  [C++]Fonctions virtuelles

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++]Fonctions virtuelles

n°58026
bkadoum
Posté le 06-09-2001 à 12:41:26  profilanswer
 

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]

mood
Publicité
Posté le 06-09-2001 à 12:41:26  profilanswer
 

n°58040
seblamb
Posté le 06-09-2001 à 13:59:27  profilanswer
 

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 ?

n°58057
H4dd3R
Q2
Posté le 06-09-2001 à 14:46:04  profilanswer
 

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
n°58064
bkadoum
Posté le 06-09-2001 à 14:57:00  profilanswer
 

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.

n°58074
BENB
100% Lux.
Posté le 06-09-2001 à 15:05:36  profilanswer
 

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...

n°58105
therier
heu...coucou!
Posté le 06-09-2001 à 16:02:48  profilanswer
 

BENB a écrit a écrit :

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




 
Tout a fait d'accord!  :D

n°58146
TheJackal
Posté le 06-09-2001 à 17:24:31  profilanswer
 

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

n°58180
rufo
Pas me confondre avec Lycos!
Posté le 06-09-2001 à 22:59:57  profilanswer
 

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

n°58181
rufo
Pas me confondre avec Lycos!
Posté le 06-09-2001 à 23:01:22  profilanswer
 

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 :)

n°58223
Profil sup​primé
Posté le 07-09-2001 à 09:52:58  answer
 

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

mood
Publicité
Posté le 07-09-2001 à 09:52:58  profilanswer
 

n°58225
therier
heu...coucou!
Posté le 07-09-2001 à 09:57:58  profilanswer
 

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!

n°58359
BENB
100% Lux.
Posté le 07-09-2001 à 13:42:59  profilanswer
 

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...

n°58362
Profil sup​primé
Posté le 07-09-2001 à 13:58:09  answer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [C++]Fonctions virtuelles

 

Sujets relatifs
Recherche de Doc sur les fonctions RegOpenkey[MySQL] SELECT CONCAT et fonctions arithmétiques
fonctions API windows et VBAnb d'argument variables dans un fonctions php
surcharge de fonctions C++Liste des fonctions dans une DLL.
Avantages et fonctions du XML?[ PHP ] :: lenteur absolue de fonctions floor et ceil
Utilisation des fonctions[Visual C++] fonctions Callback
Plus de sujets relatifs à : [C++]Fonctions virtuelles


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR