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++] Fonction virtuelles

Quadrakill
Quadrakill
Niveau 11
03 avril 2013 à 22:26:35

Bonsoir à tous,

Demain matin j'ai mon partiel de programmation et je suis un peu embêté par les fonctions virtuelles, je ne comprends pas très bien en quoi elles consistent.

Est-ce-que vous pourriez m'expliquer globalement en quoi ça consiste, quelle est l'utilité des virtual ?

Merci d'avance.

PS : Je suis en première année de DUT Informatique.

vive_cod4
vive_cod4
Niveau 9
03 avril 2013 à 22:46:54

Salut,

Les fonctions s'utilisent dans les classes auxquelles elles vont avoir des enfants.

Le but des méthodes virtuelles sont de permettre aux enfants de redéfinir les méthodes du parent. Il est fortement conseillé de mettre le destructeur virtuel aussi.

Voilà un exemple :

classe.h : http://pastebin.com/TQvA4tGm
mai.cpp : http://pastebin.com/4zQa1WKz

Observe bien les sorties des programmes et regarde les différences entre les 2

Dans la classe parent, il est fortement conseillé de mettre le destructeur virtuel

vive_cod4
vive_cod4
Niveau 9
03 avril 2013 à 22:51:31

Et et peut-être tu es censé savoir ça, mais tu peux aussi avoir des méthodes virtuelles pures, qui servent à définir une classe comme abstraite.

class XXX{
...
virtual void xxx() = 0;
};

Pseudo supprimé
Pseudo supprimé 03 avril 2013 à 23:11:12

Par exemple t'as une classe Forme, tu veux pouvoir calculer l'aire d'une forme donc tu crées une méthode aire().
T'as 2 classes filles Carré, et Triangle qui héritent de Forme. L'aire d'un carré ne se calcule pas comme celle d'un triangle, donc tu redéfinis la méthode aire() dans ces 2 classes.

Tu peux créer un pointeur sur Triangle ou un Carré de cette façon :
Triangle* triangle = new Triangle();
Carré* carré = new Carré();
Quand tu appelles la méthode aire() de ces objets, tu appelles la méthode aire() de la classe Triangle ou Carré puisque tu l'as redéfinie.

Tu peux aussi créer un pointeur sur une Forme, et mettre un Triangle (ou un Carré) dedans, car Triangle dérive de Forme.
Forme* forme = new Triangle();
Si tu appelles la méthode aire() de cet objet, qu'est-ce qui se passe ?
Si la méthode aire() de Forme n'est pas virtual, alors c'est la méthode aire() de la classe Forme qui est appelée, car forme est un pointeur sur une Forme.
Si la méthode aire() de Forme est virtual, alors c'est la méthode aire() de la classe Triangle qui est appelée, car bien que forme soit un pointeur sur une Forme, sa vraie classe est Triangle.
Voilà la différence entre une méthode virtual ou pas.

Ensuite pourquoi tu voudrais stocker des Triangle ou des Carré dans des Forme* ? Bah si tu veux mettre tous tes Triangle et Carré dans un même tableau (ou vector) par exemple, et calculer l'aire de toutes les formes de ton tableau en utilisant une méthode qui a le même nom (aire).

Sinon petite info qui peut servir pour ton contrôle (genre question de cours) demain, si tu spécifies dans une classe mère qu'une méthode est virtuelle, alors elle le sera aussi dans ses classes filles même si tu n'écris pas explicitement virtual en redéfinissant la méthode dans les classes filles.

Quadrakill
Quadrakill
Niveau 11
03 avril 2013 à 23:34:58

Vraiment merci beaucoup pour vos réponses, ça a été comme une lumière révélatrice là pour le coup ! :noel:

J'avais vraiment pas compris l'utilité alors, en effet.
Et ouais on a vu aussi les virtuellement pures aussi.

Je me sens con je sais pas trop quoi vous répondre parce que j'ai vraiment tout compris donc désolé de dire du vent...

Je vous remercie encore pour vos explications très claires ! :)

Encore merci, et à bientôt surement parce qu'on a un projet de prog et je sens que je vais en chier mais il est l'heure d'aller au lit !

Bonne soirée.

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