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

 


Dernière réponse
Sujet : [C++]Fonctions virtuelles
Profil supprimé j'avit paas vu qu'il faisait de l'héritage multiple.

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
j'avit paas vu qu'il faisait de l'héritage multiple.
BENB

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

therier

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!

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

rufo 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 :)
rufo vu la définition de tes classes, ça m'étonne pas que le compilateur te dise d'aller te faire voir :D
TheJackal ca fait bpc de truc pour une si petite classe...
therier

BENB a écrit a écrit :

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




 
Tout a fait d'accord!  :D

BENB

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

bkadoum 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.
H4dd3R Oui précise comment tu définis A et comment tu appeles Get() car effectivement ça devrait marcher.. :)
seblamb 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 ?
bkadoum 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]


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)