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++, dérivation et polymorphisme

arnaud81
arnaud81
Niveau 7
13 septembre 2003 à 01:57:00

voila, j´ai un probleme avec mes classes qui provoque une violation d´acces ( à l´adresse 0). Voici un exemple pour illustrer mon probleme : j´ai 2 classes :

class Ori{
public:
Destroy(){ toto(); };
private:
virtual void toto(void) = 0;
//Fonction viruelle pure
//On ne peut donc pas instancier cette classe
};

//classe dérivée sur la base de Ori
class Derive :public Ori{
private:
void toto(void);
};

voila, alors se probleme se passe quand la fonction Destroy est appelé . C´est normal ? Ou il n´est pas permis a la classe de base d´appeler sa fonction virtuelle dérivée ?

LeCroqueMitaine
LeCroqueMitaine
Niveau 10
13 septembre 2003 à 02:01:37

c´est normal

Destroy(), c´est ton destructeur ?
ou alors c´est appele dans le destructeur ?

ce qui se passe, ce qui est pas forcement simple a expliquer/comprendre, c´est que la classe dérivée est detruite, donc la fonction toto() aussi et du coup, quand la fonction est appelée dans le destructeur de la classe ori, elle n´existe plus, hop, erreur !

donc, faut pas faire comme ça :)

JeanYvesYves
JeanYvesYves
Niveau 10
13 septembre 2003 à 10:29:56

Oui, je pense que ça doit etre ça.

Ordre des appels :

constructions :
contruction de la classe mere, puis de la classe fille

destruction :
destruction de la classe fille, puis de la classe mere. Donc quand le destructeur de la classe mere est appelé, la classe fille est déja morte.

Pseudo supprimé
Pseudo supprimé 13 septembre 2003 à 10:42:32

Tiens, on a à faire au modéro de Final fantasy 10 :)!

JeanYvesYves
JeanYvesYves
Niveau 10
13 septembre 2003 à 10:44:23

:lol:
Bah oui, je viens ici, mais tout bleu cette fois :)

Altonfrere
Altonfrere
Niveau 10
13 septembre 2003 à 11:06:45

moi ce qui m´étonne c´est que ton compilo ne t´ai rien dit.

Tu déclares une méthode virtuelle pure en private ? !

LeCroqueMitaine
LeCroqueMitaine
Niveau 10
13 septembre 2003 à 21:28:38

jeanyvesyves: je pense que coeurbrise me parlait...
jusqu´a preuve du contraire, c´est moi le modero de ffx

JeanYvesYves
JeanYvesYves
Niveau 10
13 septembre 2003 à 21:48:56

ah ok :) arf !
moi C le modéro de " création de jeux"

LeCroqueMitaine
LeCroqueMitaine
Niveau 10
14 septembre 2003 à 02:04:41

ah ok !
enchanté :)

Paulop
Paulop
Niveau 12
14 septembre 2003 à 09:38:21

Et moi de, euh non je vais pas le dire... Mais ça commence par P et ça fini par N :-)))

protheus
protheus
Niveau 10
14 septembre 2003 à 22:15:52

pika !

protheus
protheus
Niveau 10
14 septembre 2003 à 22:18:28

Ori::toto() est privée virtuelle pure
donc nécessite une dérivée ( virtuelle pure) mais non dérivable ( private)...
y´a déjà comme un pb !

arnaud81
arnaud81
Niveau 7
15 septembre 2003 à 10:32:40

alors, oui ca compile sans probleme.
Destructeur ou pas, ca plante.
Et j´ai posé des points d´arret dans le destructeur de la classe dérivée, et y a pas d´arret donc pas de destruction de l´objet ( c qui est normal).

en fait, ce que je voulais faire :
quand je fais window.destroy() ( *windows->destroy()), la fonction appelle la fonction de la classe dérivée) listbox.destroy()
ou combobox.desroy() en fonction de la classe
. ..
en fait, peu etre qu´une simple surcharge suffirait...tient je vais essayer....

voila voila, merci!

kookii
kookii
Niveau 4
15 septembre 2003 à 16:39:07

Tu peux pas, car qu´est ce qui te dit que ton pointeur c´est une listbox ou combobox, qd t´es ds le destroy de ta class window.

si j´ai bien compris ce que tu voulais faire, c´est que qd tu detruits la fenetre principale, ca detruit toutes les instances des classes derivees de celle-ci.
Dans ce cas tu peux tenir a jour une liste des instances derivees.

class window
{
static list<window*> deriv;

}

et ensuite ds le constructeur tu ajoute l´element a la liste.
Puis ds le destructeur de la class mere, tu vide ta liste.
Je sais pas si j´ai bien compris ton pb, sinon si t y arrive tjrs pas reessaye d expliquer :)

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