Bonjour 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?
Module piece.h
piece.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
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
cavalier.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
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.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 #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
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
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; }
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 #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; }
Partager