CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C++] operator et polymorphisme

lndiana-Jones
lndiana-Jones
Niveau 10
14 mai 2011 à 23:12:20

bonjour,

ma question est ce qu'on peut faire des operators virtuels? merci

godrik
godrik
Niveau 30
15 mai 2011 à 01:35:13

Je ne vois pas de raison directe de ne pas pouvoir faire des operators virtuel.
Par contre, ca pourrait bien ne pas faire ce que tu veux selon les utilisation. En effet, seul un des parametre de l'operateur sera "polymorphise" car "a+b" est different de "b+a" en terme d'appel de fonction. le premier appelle la fonction operator+ de a et passe b en parametre (avec potentiellement un type de base). Donc si tu as deux classes: Base et Derive et que tu as.
Base *a;
Base *b;

avec a et b sont des pointeurs sur un objet de type Derive.

a+b vas appeller la fonction Derive::operator+ (Base*) (plus ou moins des const et valeur de retour).

Precises exactement ce que tu cherche a faire.

lndiana-Jones
lndiana-Jones
Niveau 10
15 mai 2011 à 01:46:28

c'est exactement ce que je cherche à connaitre, cad la fonction qui va être appeler
est ce que ça reste valable pour tous les autres opérateurs?

godrik
godrik
Niveau 30
15 mai 2011 à 18:38:23

Un operateur c'est une fonction comme une autre.
Si tu as:
A* a;
B* b;
et que tu fais:
a->f(b); // ou *a+*b qui est resolu resoud en (*a).operator+(*b);
la compilateur cherche la fonction A::f(B*);
Si il n'y a pas de fonction comme cela, il va chercher a transtype un B* en autre chose qu'il connait typiquement un A::F(void*).

Supposons que B* est bien defini, alors il va utiliser la fonction A::f(B*). Si cette fonction est virtuelle etque A est en fait de type X, la fonction appelle sera X::f(B*).

Comme tu peux le remarque le type deuxieme parametre n'est JAMAIS change. Si c'est un B* au debut, ca restera un B* a la fin.

Cependant, tu peux contourner ca (avec ce que les gens appelle un pattern de visiteur) en faisait que la fonction X::f(B*) appelle une fonction de B
par exemple:

something X::f(B* b)
{
return b->f(this);
}

Ici, this est deja type X* donc le compilateur va chercher une fonction qui match B::f(X*); si il y en a une, elle sera ensuite verifier pour polymorphisme et si B* est en fait de type Y, la fonction Y::f(X*) sera appelle et tu as bien tout tes types qui ont ete resolu.

Cela etant dit, je trouve ca chiant comme la pluie a utilise, en particulier par ce que tu as des tonnes de fonction "cretine" a ecrire.

lndiana-Jones
lndiana-Jones
Niveau 10
15 mai 2011 à 22:49:23

merci

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment