Explication Destructeur D'objet
:DBonjour je debut dans le c++, pour illustrer l'utilisation de l'heritage, des notion de constructeur, destructeur,contructeur de recopi j'ai fait quelle que classe representant une classe de base virtuel piece. Sur la quelle le classe cavalier heriete. Par la suite je fait un ptit test dans le main.cpp pour pouvoir suivre la contruction destruction copie de mes objets.
Lorsque j'execute le programme la destruction de l'objet cavalier ne s'effectu pas. Quelqu'un pourait t'il m'explique d'ou vien le probleme?:cry:
Module piece.h
Code:
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 27 28 29 30 31 32
| #ifndef PIECE_H
#define PIECE_H
#include <iostream>
using namespace std;
class piece
{
private:
short X;
short Y;
short joueur;//noir=1 et blanc=0
protected:
void setX(short x);
void setY(short y);
void setjoueur(int joueur);
char * nom;
public:
piece(short x, short y, char * nom, short joueur);
piece(piece & a);
~piece();
short getX()const;
short getY()const;
short getjoueur() const;
char * getnom()const;
virtual void affiche() const =0;//methode virtuel à redefinir
virtual short mouv(short x, short y) =0;//methode virtuel à redefinir
};
#endif |
piece.cpp
Code:
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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| #include "piece.h"
piece::piece (short x,short y, char * n, short j)
{ cout<<this<<" constructeur piece"<<" nom"<<&nom<<"\n";
X=x;
Y=y;
nom = new char[8];
strcpy(nom, n);
joueur=j;
}
piece::~piece()
{cout<<this<<" detructeur piece"<<" nom"<<&nom<<"\n";
delete nom;
}
piece::piece(piece & a)
{ cout<<this<<" copie piece ";
X=a.X;
Y=a.Y;
nom = new char[8];
strcpy(nom, a.nom);
joueur=a.joueur;
cout<<"nom"<<&nom<<"\n";
}
short piece::getX ()const
{
return X;
}
short piece::getY ()const
{
return Y;
}
void piece::setX (short x)
{
X=x;
}
void piece::setY (short y)
{
Y=y;
}
short piece::getjoueur ()const
{
return joueur;
}
char * piece::getnom()const
{
return nom;
} |
cavalier.h
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| #ifndef _CAVALIER_H
#define _CAVALIER_H
#include "piece.h"
class cavalier: public piece
{
public:
cavalier(short x, short y, char * nom, short joueur);
~cavalier();
cavalier(cavalier & a);
short mouv(short x, short y);//redefinition de class virtuel heriter
void affiche()const;//affiche juste le nom du pion //redefinition de class virtuel heriter
};
#endif |
cavalier.cpp
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| #include "cavalier.h"
cavalier::cavalier (short x, short y, char * n, short j):piece( x, y, n, j)
{
cout<<this<<" constructeur cavalier"<<" nom"<<&nom<<"\n";
}
cavalier::~cavalier()
{cout<<this<<" destructeur cavalier"<<" nom"<<&nom<<"\n";
delete nom;
}
cavalier::cavalier(cavalier & a):piece(a)
{
cout<<this<<" copie cavalier"<<" nom"<<&nom<<"\n";
}
short cavalier::mouv (short x, short y)
{
return 0;
}
void cavalier::affiche()const
{
cout<<nom;
} |
main.cpp
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| #include "echiquier.h"
#include<iostream>
using namespace std;
void f(cavalier f)
{
cout<<" dans f()\n";
}
int main()
{
cavalier a(1,2,"toto",1);
f(a);
return 0;
} |
merci pour les conseilles
merci beaucoup pour vos explications j'ai mieu comprit le fonctionement du cpp.:mrgreen::king: