IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

Probleme de auto-destruction virtuel d'une classe


Sujet :

C++

  1. #1
    Débutant
    Homme Profil pro
    aucun
    Inscrit en
    Avril 2012
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2012
    Messages : 152
    Points : 28
    Points
    28
    Par défaut Probleme de auto-destruction virtuel d'une classe
    Bonjour,

    Je suis un debutant en C++. Je souhaite enrichir mes connaissances informatiques en fesant de C++. Mon objectif est de finir le C++ avant les vacances de Noel. Mon probleme c'est que je ne suis pas capable de faire une auto-destruction virtuel d'une classe. Lorsque je test mon code, mon IDE affiche qu'il y a une Exception non gérée. Quelqu'un peux m'aider?

    armeAssaut.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #ifndef DEF_ARMEASSAUT
    #define DEF_ARMEASSAUT
    #include <iostream>
    #include "Fusil.h"
     
    class armeAssaut : public Fusil
    {
    protected:
    	double m_tauxBalle;
     
    public:
    	virtual void information() const;
    	armeAssaut();
    	virtual ~armeAssaut();
    };
     
    #endif
    Fusil.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #ifndef DEF_FUSIL
    #define DEF_FUSIL
     
    class Fusil
    {
    protected:
    	double m_dommage;
    	double m_distance;
    	double m_mobilite;
     
    public:
    	virtual void information() const;
    	Fusil();
    	virtual ~Fusil();
    };
     
    void afficher(Fusil const& x);
     
    #endif
    Sniper.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #ifndef DEF_SNIPER
    #define DEF_SNIPER
    #include <iostream>
    #include "Fusil.h"
     
    class Sniper : public Fusil
    {
    protected:
    	double m_precision;
     
    public:
    	virtual void information() const;
    	Sniper();
    	virtual ~Sniper();
    };
     
     
    #endif
    armeAssaut.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    #include "armeAssaut.h"
    #include "Fusil.h"
    #include <iostream>
    using namespace std;
     
    void armeAssaut::information() const
    {
    	cout << "Arme d'assault" << endl;
    }
     
    armeAssaut::armeAssaut()
    {
    	m_dommage = 0.74;
    	m_distance = 0.74;
    	m_mobilite = 0.65;
    	m_tauxBalle = 0.50;
    }
     
    armeAssaut::~armeAssaut()
    {
    	delete this;
    }
    Fusil.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    #include "Fusil.h"
    #include <iostream>
    using namespace std;
     
    Fusil::Fusil()
    {
    	m_dommage = 0;
    	m_distance = 0;
    	m_mobilite = 0;
    }
     
    void Fusil::information() const
    {
    	cout << "Arme" << endl;
    }
     
    void afficher(Fusil const& x)
    {
    	x.information();
    }
     
     
    Fusil::~Fusil()
    {
    	delete this;
    }
    main.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #include <iostream>
    #include "Fusil.h"
    #include "armeAssaut.h"
    #include "Sniper.h"
    using namespace std;
     
     
    int main()
    {
    	Fusil *x(0);
    	x = new armeAssaut;
     
    	x->information();
     
    	delete x;
     
    	system("pause");
    	return 0;
    }
    Sniper.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    #include "Sniper.h"
    #include "Fusil.h"
    #include <iostream>
    using namespace std;
     
    void Sniper::information() const
    {
    	cout << "Sniper" << endl;
    }
     
    Sniper::Sniper()
    {
    	m_dommage = 0.89;
    	m_distance = 1;
    	m_mobilite = 1;
    	m_precision = 0.87;
    }
     
    Sniper::~Sniper()
    {
    	delete this;
    }

  2. #2
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 739
    Points : 3 627
    Points
    3 627
    Par défaut
    On ne fait surtout pas de delete this; dans un destructeur.
    Ça n'a pas de sens, l'objet est déjà en cours de destruction.

  3. #3
    Débutant
    Homme Profil pro
    aucun
    Inscrit en
    Avril 2012
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2012
    Messages : 152
    Points : 28
    Points
    28
    Par défaut
    Alors, j'ecris rien entre les accolades?

  4. #4
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Hello,

    Tu post beaucoup de questions extremement basique, je pense qu'il faudrait que tu lises un bon tuto / bouquin

    Dans tous tes destructeurs, l'objet est déjà en train d'être détruit (donc quelqu'un à déjà appelé delete).

    Il est inutile (et faux) de le rappeler.
    Dans un destructeur, on détruit des ressources qu'utilise la classe, pas l'instance de la classe.

  5. #5
    Débutant
    Homme Profil pro
    aucun
    Inscrit en
    Avril 2012
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2012
    Messages : 152
    Points : 28
    Points
    28
    Par défaut
    Merci beaucoup. Le langage c++ c'est vraiment complexe.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme de declaration de variable dans une classe
    Par mattmax dans le forum VB.NET
    Réponses: 4
    Dernier message: 17/02/2014, 14h51
  2. auto-boxing/unboxing sur une classe wrapper personnelle
    Par tamar_a_roulettes dans le forum Langage
    Réponses: 3
    Dernier message: 17/03/2011, 10h18
  3. Réponses: 12
    Dernier message: 20/05/2009, 15h32
  4. erreur de compilation : probleme avec type de structure dans une classe
    Par medkarim dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 21/10/2008, 15h33
  5. Probleme affichage Clip addchild à partir d'une classe externe
    Par Niokizou dans le forum ActionScript 3
    Réponses: 3
    Dernier message: 23/04/2008, 15h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo