In article
,
Stan wrote:
>On 24 jan, 23:37, Fabien LE LEZ wrote:
>> Ta ligne>A() : x() {};
>> initialise x une valeur par d faut, qui se trouve tre 0 si
>> mes souvenirs sont bons. a ne me para t pas excessivement
>> utile.
>Je pense que ça dépend de l'architecture matériel parce que,
>si la classe est instanciée en globale , x vaudra zéro, mais
>sur la pile, elle sera indéfinie ( VC sur x86 ).
Non, ca ne depend pas. C'est parfaitement defini par la norme. Les
globales/static sont initialisees a 0 (que des bits a zero),
et ca fait effectivement 0 pour des valeurs numeriques
entieres, independamment de l'archi materielle. Et les
automatiques ne sont pas initialisees, s'en servir avant de
leur donner une valeur EST une erreur.
In article
<36f263bf-df9e-41ab-9cd6-aff66f8f0...@r19g2000yqb.googlegroups.com>,
Stan <t...@neuf.fr> wrote:
>On 24 jan, 23:37, Fabien LE LEZ <grams...@gramster.com> wrote:
>> Ta ligne>A() : x() {};
>> initialise x une valeur par d faut, qui se trouve tre 0 si
>> mes souvenirs sont bons. a ne me para t pas excessivement
>> utile.
>Je pense que ça dépend de l'architecture matériel parce que,
>si la classe est instanciée en globale , x vaudra zéro, mais
>sur la pile, elle sera indéfinie ( VC sur x86 ).
Non, ca ne depend pas. C'est parfaitement defini par la norme. Les
globales/static sont initialisees a 0 (que des bits a zero),
et ca fait effectivement 0 pour des valeurs numeriques
entieres, independamment de l'archi materielle. Et les
automatiques ne sont pas initialisees, s'en servir avant de
leur donner une valeur EST une erreur.
In article
,
Stan wrote:
>On 24 jan, 23:37, Fabien LE LEZ wrote:
>> Ta ligne>A() : x() {};
>> initialise x une valeur par d faut, qui se trouve tre 0 si
>> mes souvenirs sont bons. a ne me para t pas excessivement
>> utile.
>Je pense que ça dépend de l'architecture matériel parce que,
>si la classe est instanciée en globale , x vaudra zéro, mais
>sur la pile, elle sera indéfinie ( VC sur x86 ).
Non, ca ne depend pas. C'est parfaitement defini par la norme. Les
globales/static sont initialisees a 0 (que des bits a zero),
et ca fait effectivement 0 pour des valeurs numeriques
entieres, independamment de l'archi materielle. Et les
automatiques ne sont pas initialisees, s'en servir avant de
leur donner une valeur EST une erreur.
Stan writes:
> On 26 jan, 13:55, Jean-Marc Bourguet wrote:
> >Essaie avec
> > {
> > Class Ca;
> > std::cout << "Class globale A= " << Cg.A << std::endl;
> > std::cout << "Class auto A= " << Ca.A << std::endl;
> > Ca.A = 42;
> > std::cout << "Class auto A= " << Ca.A << std::endl;
> > std::cout << "&Ca.A=" << (void*)&Ca.A << std::endl;
> > }
> > {
> > Class Ca;
> > std::cout << "Class globale A= " << Cg.A << std::endl;
> > std::cout << "Class auto A= " << Ca.A << std::endl;
> > std::cout << "&Ca.A=" << (void*)&Ca.A << std::endl;
> > }
> >si tu veux.
> Voici le résultat avec VC6++ ( je n'ai que ça sous la main ) :
> Class globale A= 0
> Class auto A= -858993460
> Class auto A= 42
> &Ca.A 12FF7C
> Class globale A= 0
> Class auto A= -858993460
> &Ca.A 12FF78
VC6++ n'est pas conforme sur ce point (ref. 12.6.2/3 et 8.5/5).
Stan <t...@neuf.fr> writes:
> On 26 jan, 13:55, Jean-Marc Bourguet <j...@bourguet.org> wrote:
> >Essaie avec
> > {
> > Class Ca;
> > std::cout << "Class globale A= " << Cg.A << std::endl;
> > std::cout << "Class auto A= " << Ca.A << std::endl;
> > Ca.A = 42;
> > std::cout << "Class auto A= " << Ca.A << std::endl;
> > std::cout << "&Ca.A=" << (void*)&Ca.A << std::endl;
> > }
> > {
> > Class Ca;
> > std::cout << "Class globale A= " << Cg.A << std::endl;
> > std::cout << "Class auto A= " << Ca.A << std::endl;
> > std::cout << "&Ca.A=" << (void*)&Ca.A << std::endl;
> > }
> >si tu veux.
> Voici le résultat avec VC6++ ( je n'ai que ça sous la main ) :
> Class globale A= 0
> Class auto A= -858993460
> Class auto A= 42
> &Ca.A=0012FF7C
> Class globale A= 0
> Class auto A= -858993460
> &Ca.A=0012FF78
VC6++ n'est pas conforme sur ce point (ref. 12.6.2/3 et 8.5/5).
Stan writes:
> On 26 jan, 13:55, Jean-Marc Bourguet wrote:
> >Essaie avec
> > {
> > Class Ca;
> > std::cout << "Class globale A= " << Cg.A << std::endl;
> > std::cout << "Class auto A= " << Ca.A << std::endl;
> > Ca.A = 42;
> > std::cout << "Class auto A= " << Ca.A << std::endl;
> > std::cout << "&Ca.A=" << (void*)&Ca.A << std::endl;
> > }
> > {
> > Class Ca;
> > std::cout << "Class globale A= " << Cg.A << std::endl;
> > std::cout << "Class auto A= " << Ca.A << std::endl;
> > std::cout << "&Ca.A=" << (void*)&Ca.A << std::endl;
> > }
> >si tu veux.
> Voici le résultat avec VC6++ ( je n'ai que ça sous la main ) :
> Class globale A= 0
> Class auto A= -858993460
> Class auto A= 42
> &Ca.A 12FF7C
> Class globale A= 0
> Class auto A= -858993460
> &Ca.A 12FF78
VC6++ n'est pas conforme sur ce point (ref. 12.6.2/3 et 8.5/5).
In article<4b5f22b7$0$17500$,
Richard Delorme wrote:La réalité peut être plus complexe. En pratique une classe peut-être
assez compliquée et n'avoir besoin que d'une partie de ses variables
initialisées selon la situation. Tout initialiser dans le constructeur
(ou pire, avoir un compilateur qui initialiserait tout par défaut) peut
causer des problèmes de performances. L'idéal est de n'initialiser que
ce qui est nécessaire avant son utilisation.
Ca pue (au sens anti-pattern). Si ta classe est assez complexe pour
pouvoir tomber sur ce genre de choses, c'est generalement que tu essaies de
lui faire faire trop de choses, et qu'elle gagnerait grandement a etre
decoupee en morceaux plus petits, pour lesquels ce genre de souci ne se
poserait plus.
Quant a valgrind... je suis un fervent adepte de la programmation "a la main".
Les outils qui permettent de verifier les choses, c'est toujours bon a
prendre. Ca presente entre autres un fort interet pedagogique pour essayer
de rentrer quelques bonnes notions dans la tete au neuneu moyen.
Mais on se retrouve vite a trop se reposer dessus, et a faire des cochonneries
en se disant "de toutes facons, si c'est pas bon, valgrind va me sauver".
Mouais bof. Valgrind est cense etre plus con que le programmeur, quand meme,
et il va chopper toute une gamme d'erreurs idiotes, et en laisser passer
quelques-unes malgre tout.
In article<4b5f22b7$0$17500$ba4acef3@news.orange.fr>,
Richard Delorme<abulmo@nospam.fr> wrote:
La réalité peut être plus complexe. En pratique une classe peut-être
assez compliquée et n'avoir besoin que d'une partie de ses variables
initialisées selon la situation. Tout initialiser dans le constructeur
(ou pire, avoir un compilateur qui initialiserait tout par défaut) peut
causer des problèmes de performances. L'idéal est de n'initialiser que
ce qui est nécessaire avant son utilisation.
Ca pue (au sens anti-pattern). Si ta classe est assez complexe pour
pouvoir tomber sur ce genre de choses, c'est generalement que tu essaies de
lui faire faire trop de choses, et qu'elle gagnerait grandement a etre
decoupee en morceaux plus petits, pour lesquels ce genre de souci ne se
poserait plus.
Quant a valgrind... je suis un fervent adepte de la programmation "a la main".
Les outils qui permettent de verifier les choses, c'est toujours bon a
prendre. Ca presente entre autres un fort interet pedagogique pour essayer
de rentrer quelques bonnes notions dans la tete au neuneu moyen.
Mais on se retrouve vite a trop se reposer dessus, et a faire des cochonneries
en se disant "de toutes facons, si c'est pas bon, valgrind va me sauver".
Mouais bof. Valgrind est cense etre plus con que le programmeur, quand meme,
et il va chopper toute une gamme d'erreurs idiotes, et en laisser passer
quelques-unes malgre tout.
In article<4b5f22b7$0$17500$,
Richard Delorme wrote:La réalité peut être plus complexe. En pratique une classe peut-être
assez compliquée et n'avoir besoin que d'une partie de ses variables
initialisées selon la situation. Tout initialiser dans le constructeur
(ou pire, avoir un compilateur qui initialiserait tout par défaut) peut
causer des problèmes de performances. L'idéal est de n'initialiser que
ce qui est nécessaire avant son utilisation.
Ca pue (au sens anti-pattern). Si ta classe est assez complexe pour
pouvoir tomber sur ce genre de choses, c'est generalement que tu essaies de
lui faire faire trop de choses, et qu'elle gagnerait grandement a etre
decoupee en morceaux plus petits, pour lesquels ce genre de souci ne se
poserait plus.
Quant a valgrind... je suis un fervent adepte de la programmation "a la main".
Les outils qui permettent de verifier les choses, c'est toujours bon a
prendre. Ca presente entre autres un fort interet pedagogique pour essayer
de rentrer quelques bonnes notions dans la tete au neuneu moyen.
Mais on se retrouve vite a trop se reposer dessus, et a faire des cochonneries
en se disant "de toutes facons, si c'est pas bon, valgrind va me sauver".
Mouais bof. Valgrind est cense etre plus con que le programmeur, quand meme,
et il va chopper toute une gamme d'erreurs idiotes, et en laisser passer
quelques-unes malgre tout.
Le 26/01/2010 19:35, Marc Espie a écrit :In article<4b5f22b7$0$17500$,
Richard Delorme wrote:La réalité peut être plus complexe. En pratique une classe peut-être
assez compliquée et n'avoir besoin que d'une partie de ses variables
initialisées selon la situation. Tout initialiser dans le constructeur
(ou pire, avoir un compilateur qui initialiserait tout par défaut) peut
causer des problèmes de performances. L'idéal est de n'initialiser que
ce qui est nécessaire avant son utilisation.
Ca pue (au sens anti-pattern). Si ta classe est assez complexe pour
pouvoir tomber sur ce genre de choses, c'est generalement que tu
essaies de
lui faire faire trop de choses, et qu'elle gagnerait grandement a etre
decoupee en morceaux plus petits, pour lesquels ce genre de souci ne se
poserait plus.
Pas nécessairement. Je prend un exemple, un coup dans un jeu d'échec.
Une implémentation simplifiée sous forme de classe pourrait être :
class Move {
// fonctions membres privées
public:
struct {
Coordinate x;
Piece piece;
} from, to;
Piece promotion;
int value;
// fonctions membres publiques.
}
Pourquoi initialiser la variable promotion si la pièce de départ n'est
pas un pion, où, même si c'est un pion, la case d'arrivée n'est pas sur
la dernière rangée ?
La valeur du coup, la variable value, est issue d'un long calcul. A quoi
bon y mettre une valeur bidon ?
Pour moi, l'état indéterminée d'une variable a du sens et je ne
comprends pas cette volonté de mettre une valeur déterminée à tout prix
pour tout.
En pratique, cette classe ne contient ni constructeur ni destructeur.
Les données du coup sont initialisées directement depuis son conteneur
(un tableau de coups), car il est plus simple de générer l'ensemble des
coups (ou tout du moins d'une famille de coups), qu'un coup isolé.
Peut-être cette façon de procéder est-elle un anti-pattern, mais c'est
la manière idiomatique qu'utilise tous les programmes d'un niveau
acceptable écrit en C++.
Le 26/01/2010 19:35, Marc Espie a écrit :
In article<4b5f22b7$0$17500$ba4acef3@news.orange.fr>,
Richard Delorme<abulmo@nospam.fr> wrote:
La réalité peut être plus complexe. En pratique une classe peut-être
assez compliquée et n'avoir besoin que d'une partie de ses variables
initialisées selon la situation. Tout initialiser dans le constructeur
(ou pire, avoir un compilateur qui initialiserait tout par défaut) peut
causer des problèmes de performances. L'idéal est de n'initialiser que
ce qui est nécessaire avant son utilisation.
Ca pue (au sens anti-pattern). Si ta classe est assez complexe pour
pouvoir tomber sur ce genre de choses, c'est generalement que tu
essaies de
lui faire faire trop de choses, et qu'elle gagnerait grandement a etre
decoupee en morceaux plus petits, pour lesquels ce genre de souci ne se
poserait plus.
Pas nécessairement. Je prend un exemple, un coup dans un jeu d'échec.
Une implémentation simplifiée sous forme de classe pourrait être :
class Move {
// fonctions membres privées
public:
struct {
Coordinate x;
Piece piece;
} from, to;
Piece promotion;
int value;
// fonctions membres publiques.
}
Pourquoi initialiser la variable promotion si la pièce de départ n'est
pas un pion, où, même si c'est un pion, la case d'arrivée n'est pas sur
la dernière rangée ?
La valeur du coup, la variable value, est issue d'un long calcul. A quoi
bon y mettre une valeur bidon ?
Pour moi, l'état indéterminée d'une variable a du sens et je ne
comprends pas cette volonté de mettre une valeur déterminée à tout prix
pour tout.
En pratique, cette classe ne contient ni constructeur ni destructeur.
Les données du coup sont initialisées directement depuis son conteneur
(un tableau de coups), car il est plus simple de générer l'ensemble des
coups (ou tout du moins d'une famille de coups), qu'un coup isolé.
Peut-être cette façon de procéder est-elle un anti-pattern, mais c'est
la manière idiomatique qu'utilise tous les programmes d'un niveau
acceptable écrit en C++.
Le 26/01/2010 19:35, Marc Espie a écrit :In article<4b5f22b7$0$17500$,
Richard Delorme wrote:La réalité peut être plus complexe. En pratique une classe peut-être
assez compliquée et n'avoir besoin que d'une partie de ses variables
initialisées selon la situation. Tout initialiser dans le constructeur
(ou pire, avoir un compilateur qui initialiserait tout par défaut) peut
causer des problèmes de performances. L'idéal est de n'initialiser que
ce qui est nécessaire avant son utilisation.
Ca pue (au sens anti-pattern). Si ta classe est assez complexe pour
pouvoir tomber sur ce genre de choses, c'est generalement que tu
essaies de
lui faire faire trop de choses, et qu'elle gagnerait grandement a etre
decoupee en morceaux plus petits, pour lesquels ce genre de souci ne se
poserait plus.
Pas nécessairement. Je prend un exemple, un coup dans un jeu d'échec.
Une implémentation simplifiée sous forme de classe pourrait être :
class Move {
// fonctions membres privées
public:
struct {
Coordinate x;
Piece piece;
} from, to;
Piece promotion;
int value;
// fonctions membres publiques.
}
Pourquoi initialiser la variable promotion si la pièce de départ n'est
pas un pion, où, même si c'est un pion, la case d'arrivée n'est pas sur
la dernière rangée ?
La valeur du coup, la variable value, est issue d'un long calcul. A quoi
bon y mettre une valeur bidon ?
Pour moi, l'état indéterminée d'une variable a du sens et je ne
comprends pas cette volonté de mettre une valeur déterminée à tout prix
pour tout.
En pratique, cette classe ne contient ni constructeur ni destructeur.
Les données du coup sont initialisées directement depuis son conteneur
(un tableau de coups), car il est plus simple de générer l'ensemble des
coups (ou tout du moins d'une famille de coups), qu'un coup isolé.
Peut-être cette façon de procéder est-elle un anti-pattern, mais c'est
la manière idiomatique qu'utilise tous les programmes d'un niveau
acceptable écrit en C++.
Pour moi, l'état indéterminée d'une variable a du sens et je ne
comprends pas cette volonté de mettre une valeur déterminée à tout prix
pour tout.
Pour moi, l'état indéterminée d'une variable a du sens et je ne
comprends pas cette volonté de mettre une valeur déterminée à tout prix
pour tout.
Pour moi, l'état indéterminée d'une variable a du sens et je ne
comprends pas cette volonté de mettre une valeur déterminée à tout prix
pour tout.
Le 26/01/2010 19:35, Marc Espie a écrit :
> In article<4b5f22b7$0$17500$,
> Richard Delorme wrote:
>> La réalité peut être plus complexe. En pratique une classe peut- être
>> assez compliquée et n'avoir besoin que d'une partie de ses variables
>> initialisées selon la situation. Tout initialiser dans le constructe ur
>> (ou pire, avoir un compilateur qui initialiserait tout par défaut) p eut
>> causer des problèmes de performances. L'idéal est de n'initialiser que
>> ce qui est nécessaire avant son utilisation.
> Ca pue (au sens anti-pattern). Si ta classe est assez complexe pour
> pouvoir tomber sur ce genre de choses, c'est generalement que tu essaie s de
> lui faire faire trop de choses, et qu'elle gagnerait grandement a etre
> decoupee en morceaux plus petits, pour lesquels ce genre de souci ne se
> poserait plus.
Pas nécessairement. Je prend un exemple, un coup dans un jeu d'échec.
Une implémentation simplifiée sous forme de classe pourrait être :
class Move {
// fonctions membres privées
public:
struct {
Coordinate x;
Piece piece;
} from, to;
Piece promotion;
int value;
// fonctions membres publiques.
}
Le 26/01/2010 19:35, Marc Espie a écrit :
> In article<4b5f22b7$0$17500$ba4ac...@news.orange.fr>,
> Richard Delorme<abu...@nospam.fr> wrote:
>> La réalité peut être plus complexe. En pratique une classe peut- être
>> assez compliquée et n'avoir besoin que d'une partie de ses variables
>> initialisées selon la situation. Tout initialiser dans le constructe ur
>> (ou pire, avoir un compilateur qui initialiserait tout par défaut) p eut
>> causer des problèmes de performances. L'idéal est de n'initialiser que
>> ce qui est nécessaire avant son utilisation.
> Ca pue (au sens anti-pattern). Si ta classe est assez complexe pour
> pouvoir tomber sur ce genre de choses, c'est generalement que tu essaie s de
> lui faire faire trop de choses, et qu'elle gagnerait grandement a etre
> decoupee en morceaux plus petits, pour lesquels ce genre de souci ne se
> poserait plus.
Pas nécessairement. Je prend un exemple, un coup dans un jeu d'échec.
Une implémentation simplifiée sous forme de classe pourrait être :
class Move {
// fonctions membres privées
public:
struct {
Coordinate x;
Piece piece;
} from, to;
Piece promotion;
int value;
// fonctions membres publiques.
}
Le 26/01/2010 19:35, Marc Espie a écrit :
> In article<4b5f22b7$0$17500$,
> Richard Delorme wrote:
>> La réalité peut être plus complexe. En pratique une classe peut- être
>> assez compliquée et n'avoir besoin que d'une partie de ses variables
>> initialisées selon la situation. Tout initialiser dans le constructe ur
>> (ou pire, avoir un compilateur qui initialiserait tout par défaut) p eut
>> causer des problèmes de performances. L'idéal est de n'initialiser que
>> ce qui est nécessaire avant son utilisation.
> Ca pue (au sens anti-pattern). Si ta classe est assez complexe pour
> pouvoir tomber sur ce genre de choses, c'est generalement que tu essaie s de
> lui faire faire trop de choses, et qu'elle gagnerait grandement a etre
> decoupee en morceaux plus petits, pour lesquels ce genre de souci ne se
> poserait plus.
Pas nécessairement. Je prend un exemple, un coup dans un jeu d'échec.
Une implémentation simplifiée sous forme de classe pourrait être :
class Move {
// fonctions membres privées
public:
struct {
Coordinate x;
Piece piece;
} from, to;
Piece promotion;
int value;
// fonctions membres publiques.
}
Personnellent, je préfére voir Move comme une
transaction hors de l'objet pièce.
Et d'autre part, je ne conçois pas un objet Piece
sans position initiale.
Une idée simplifiée de ce à quoi je pense :
class Piece
{
private:
// position
int m_pos;
public:
Piece(int pos) : m_pos(pos) {};
virtual ~Piece() { };
virtual Affiche()=0;
int getPos() {return m_pos; };
};
class Pion : public Piece
class Reine : public Piece
{
public:
Reine(int pos) : Piece(pos) {};
virtual ~Reine() { };
virtual Affiche() {
void Deplace ( Piece* piece, int nouvellePos, Echiquier& echiquier )
delete piece;
piece = new Reine(nouvellePos);
Personnellent, je préfére voir Move comme une
transaction hors de l'objet pièce.
Et d'autre part, je ne conçois pas un objet Piece
sans position initiale.
Une idée simplifiée de ce à quoi je pense :
class Piece
{
private:
// position
int m_pos;
public:
Piece(int pos) : m_pos(pos) {};
virtual ~Piece() { };
virtual Affiche()=0;
int getPos() {return m_pos; };
};
class Pion : public Piece
class Reine : public Piece
{
public:
Reine(int pos) : Piece(pos) {};
virtual ~Reine() { };
virtual Affiche() {
void Deplace ( Piece* piece, int nouvellePos, Echiquier& echiquier )
delete piece;
piece = new Reine(nouvellePos);
Personnellent, je préfére voir Move comme une
transaction hors de l'objet pièce.
Et d'autre part, je ne conçois pas un objet Piece
sans position initiale.
Une idée simplifiée de ce à quoi je pense :
class Piece
{
private:
// position
int m_pos;
public:
Piece(int pos) : m_pos(pos) {};
virtual ~Piece() { };
virtual Affiche()=0;
int getPos() {return m_pos; };
};
class Pion : public Piece
class Reine : public Piece
{
public:
Reine(int pos) : Piece(pos) {};
virtual ~Reine() { };
virtual Affiche() {
void Deplace ( Piece* piece, int nouvellePos, Echiquier& echiquier )
delete piece;
piece = new Reine(nouvellePos);
void Deplace ( Piece* piece, int nouvellePos, Echiquier& echiquier )
{
if (echiquier.IsRangeePromotion(nouvellePos) == true)
{
// on choisi la nouvelle piece: une reine pour l'exemple
delete piece;
piece = new Reine(nouvellePos);
}
}
void Deplace ( Piece* piece, int nouvellePos, Echiquier& echiquier )
{
if (echiquier.IsRangeePromotion(nouvellePos) == true)
{
// on choisi la nouvelle piece: une reine pour l'exemple
delete piece;
piece = new Reine(nouvellePos);
}
}
void Deplace ( Piece* piece, int nouvellePos, Echiquier& echiquier )
{
if (echiquier.IsRangeePromotion(nouvellePos) == true)
{
// on choisi la nouvelle piece: une reine pour l'exemple
delete piece;
piece = new Reine(nouvellePos);
}
}
Le 27/01/2010 10:59, Stan a écrit :
> void Deplace ( Piece* piece, int nouvellePos, Echiquier& echiquier )
> {
>
> if (echiquier.IsRangeePromotion(nouvellePos) == true)
> {
> // on choisi la nouvelle piece: une reine pour l'exemple
> delete piece;
> piece = new Reine(nouvellePos);
> }
> }
Au fait ça ne marche pas ; il y a une erreur d'école. Il faut écrire :
void Deplace (Piece **piece, /*... */)
{
/*...*/
delete *piece;
*piece = new Reine(nouvellePos);
/*...*/
}
Preuve supplémentaire qu'il faut éviter les new/delete le plus possible ;-)
Le 27/01/2010 10:59, Stan a écrit :
> void Deplace ( Piece* piece, int nouvellePos, Echiquier& echiquier )
> {
>
> if (echiquier.IsRangeePromotion(nouvellePos) == true)
> {
> // on choisi la nouvelle piece: une reine pour l'exemple
> delete piece;
> piece = new Reine(nouvellePos);
> }
> }
Au fait ça ne marche pas ; il y a une erreur d'école. Il faut écrire :
void Deplace (Piece **piece, /*... */)
{
/*...*/
delete *piece;
*piece = new Reine(nouvellePos);
/*...*/
}
Preuve supplémentaire qu'il faut éviter les new/delete le plus possible ;-)
Le 27/01/2010 10:59, Stan a écrit :
> void Deplace ( Piece* piece, int nouvellePos, Echiquier& echiquier )
> {
>
> if (echiquier.IsRangeePromotion(nouvellePos) == true)
> {
> // on choisi la nouvelle piece: une reine pour l'exemple
> delete piece;
> piece = new Reine(nouvellePos);
> }
> }
Au fait ça ne marche pas ; il y a une erreur d'école. Il faut écrire :
void Deplace (Piece **piece, /*... */)
{
/*...*/
delete *piece;
*piece = new Reine(nouvellePos);
/*...*/
}
Preuve supplémentaire qu'il faut éviter les new/delete le plus possible ;-)
Au fait ça ne marche pas ; il y a une erreur d'école. Il faut écrir e :
void Deplace (Piece **piece, /*... */)
{
/*...*/
delete *piece;
*piece = new Reine(nouvellePos);
/*...*/
}
Preuve supplémentaire qu'il faut éviter les new/delete le plus possib le ;-)
Au fait ça ne marche pas ; il y a une erreur d'école. Il faut écrir e :
void Deplace (Piece **piece, /*... */)
{
/*...*/
delete *piece;
*piece = new Reine(nouvellePos);
/*...*/
}
Preuve supplémentaire qu'il faut éviter les new/delete le plus possib le ;-)
Au fait ça ne marche pas ; il y a une erreur d'école. Il faut écrir e :
void Deplace (Piece **piece, /*... */)
{
/*...*/
delete *piece;
*piece = new Reine(nouvellePos);
/*...*/
}
Preuve supplémentaire qu'il faut éviter les new/delete le plus possib le ;-)