"Michael Doubez" a écrit dans le message de ne ws:
> Je ne connais pas de bon tutoriel c++
Non, il ne peut y en avoir par définition.
> mais il y a aussi celui de devellopez qui semble assez fourni
>http://cpp.developpez.com/
C'est nul (et c'est un euphémisme)
"Michael Doubez" <michael.dou...@free.fr> a écrit dans le message de ne ws:
6cde4c6f-7484-420a-9430-683a7388d...@18g2000yqa.googlegroups.com...
> Je ne connais pas de bon tutoriel c++
Non, il ne peut y en avoir par définition.
> mais il y a aussi celui de devellopez qui semble assez fourni
>http://cpp.developpez.com/
C'est nul (et c'est un euphémisme)
"Michael Doubez" a écrit dans le message de ne ws:
> Je ne connais pas de bon tutoriel c++
Non, il ne peut y en avoir par définition.
> mais il y a aussi celui de devellopez qui semble assez fourni
>http://cpp.developpez.com/
C'est nul (et c'est un euphémisme)
Bonjour à tous,
On dirait que mon message disant que je lisais le tuto du site du zero
a déchainé les passions.
Concernant mon programme suivant les conseils donnés :
- j'ai changé les define par des enums (mais j'aimerais savoir en
quoi il est mieux d'utiliser les enum que les defines?)
- j'ai rajouté un peu de code dans les destructeurs des fonctions
combat et personnage. Mais je sais pas si c'est propre ou pas.
Mais j'ai pas encore tout fini.
Bonjour à tous,
On dirait que mon message disant que je lisais le tuto du site du zero
a déchainé les passions.
Concernant mon programme suivant les conseils donnés :
- j'ai changé les define par des enums (mais j'aimerais savoir en
quoi il est mieux d'utiliser les enum que les defines?)
- j'ai rajouté un peu de code dans les destructeurs des fonctions
combat et personnage. Mais je sais pas si c'est propre ou pas.
Mais j'ai pas encore tout fini.
Bonjour à tous,
On dirait que mon message disant que je lisais le tuto du site du zero
a déchainé les passions.
Concernant mon programme suivant les conseils donnés :
- j'ai changé les define par des enums (mais j'aimerais savoir en
quoi il est mieux d'utiliser les enum que les defines?)
- j'ai rajouté un peu de code dans les destructeurs des fonctions
combat et personnage. Mais je sais pas si c'est propre ou pas.
Mais j'ai pas encore tout fini.
Gabriel Dos Reis wrote:
> ouais, m'enfin l'âge n'est pas vraiment déterminant...
Parce que tu n'as pas dû aller faire un tour sur les forums d'ados genr e
sdz ou developpez :-)
C'est du genre, en langage SMS insupportable à lire : "C++, cé plus
puissant que C", "C++, sa me fé tro kifé", etc...
C'est 12-15 ans de moyenne, et d'un niveau technique d'une nullité
ahurissante, qu'on ne peut vraiment pas comparer à celle d'un
consultant, même moyen, de 45 balais ayant 20 ans d'expérience en SSI I
ou Freelance.
C'est un autre monde.
Gabriel Dos Reis wrote:
> ouais, m'enfin l'âge n'est pas vraiment déterminant...
Parce que tu n'as pas dû aller faire un tour sur les forums d'ados genr e
sdz ou developpez :-)
C'est du genre, en langage SMS insupportable à lire : "C++, cé plus
puissant que C", "C++, sa me fé tro kifé", etc...
C'est 12-15 ans de moyenne, et d'un niveau technique d'une nullité
ahurissante, qu'on ne peut vraiment pas comparer à celle d'un
consultant, même moyen, de 45 balais ayant 20 ans d'expérience en SSI I
ou Freelance.
C'est un autre monde.
Gabriel Dos Reis wrote:
> ouais, m'enfin l'âge n'est pas vraiment déterminant...
Parce que tu n'as pas dû aller faire un tour sur les forums d'ados genr e
sdz ou developpez :-)
C'est du genre, en langage SMS insupportable à lire : "C++, cé plus
puissant que C", "C++, sa me fé tro kifé", etc...
C'est 12-15 ans de moyenne, et d'un niveau technique d'une nullité
ahurissante, qu'on ne peut vraiment pas comparer à celle d'un
consultant, même moyen, de 45 balais ayant 20 ans d'expérience en SSI I
ou Freelance.
C'est un autre monde.
Bonjour à tous,
On dirait que mon message disant que je lisais le tuto du site du zero
a déchainé les passions.
Concernant mon programme suivant les conseils donnés :
- j'ai changé les define par des enums (mais j'aimerais savoir en
quoi il est mieux d'utiliser les enum que les defines?)
- j'ai rajouté un peu de code dans les destructeurs des fonctions
combat et personnage. Mais je sais pas si c'est propre ou pas.
Mais j'ai pas encore tout fini.
Merci
PS : fichiers toujours dispos sur : http://beware007.free.fr/Projet_C++/rpg/
Bonjour à tous,
On dirait que mon message disant que je lisais le tuto du site du zero
a déchainé les passions.
Concernant mon programme suivant les conseils donnés :
- j'ai changé les define par des enums (mais j'aimerais savoir en
quoi il est mieux d'utiliser les enum que les defines?)
- j'ai rajouté un peu de code dans les destructeurs des fonctions
combat et personnage. Mais je sais pas si c'est propre ou pas.
Mais j'ai pas encore tout fini.
Merci
PS : fichiers toujours dispos sur : http://beware007.free.fr/Projet_C++/rpg/
Bonjour à tous,
On dirait que mon message disant que je lisais le tuto du site du zero
a déchainé les passions.
Concernant mon programme suivant les conseils donnés :
- j'ai changé les define par des enums (mais j'aimerais savoir en
quoi il est mieux d'utiliser les enum que les defines?)
- j'ai rajouté un peu de code dans les destructeurs des fonctions
combat et personnage. Mais je sais pas si c'est propre ou pas.
Mais j'ai pas encore tout fini.
Merci
PS : fichiers toujours dispos sur : http://beware007.free.fr/Projet_C++/rpg/
>>Lis un bon bouquin (Deitel ou autre) si tu veux apprendre sérieus ement.
>>Il n'y a pas d'autres méthodes...
> N'importe quoi. On peut très bien apprendre sérieusement d'un nombr e
> infini de méthodes.
Mais bien sûr, et la marmotte.
Tu as vu le niveau sur ces forums de ceux qui sortent "je maitrise le C
et le C++" ? C'est à tomber à la renverse !
La seule manière valable pour apprendre depuis la création des langag es
est avec les livres de référence.
Tu ne dois pas être très âgé, ni expérimenté...
>>Lis un bon bouquin (Deitel ou autre) si tu veux apprendre sérieus ement.
>>Il n'y a pas d'autres méthodes...
> N'importe quoi. On peut très bien apprendre sérieusement d'un nombr e
> infini de méthodes.
Mais bien sûr, et la marmotte.
Tu as vu le niveau sur ces forums de ceux qui sortent "je maitrise le C
et le C++" ? C'est à tomber à la renverse !
La seule manière valable pour apprendre depuis la création des langag es
est avec les livres de référence.
Tu ne dois pas être très âgé, ni expérimenté...
>>Lis un bon bouquin (Deitel ou autre) si tu veux apprendre sérieus ement.
>>Il n'y a pas d'autres méthodes...
> N'importe quoi. On peut très bien apprendre sérieusement d'un nombr e
> infini de méthodes.
Mais bien sûr, et la marmotte.
Tu as vu le niveau sur ces forums de ceux qui sortent "je maitrise le C
et le C++" ? C'est à tomber à la renverse !
La seule manière valable pour apprendre depuis la création des langag es
est avec les livres de référence.
Tu ne dois pas être très âgé, ni expérimenté...
On 29 juil, 12:25, Beware wrote:
> Bonjour à tous,
> On dirait que mon message disant que je lisais le tuto du site du zero
> a déchainé les passions.
> Concernant mon programme suivant les conseils donnés :
> - j'ai changé les define par des enums (mais j'aimerais savoir en
> quoi il est mieux d'utiliser les enum que les defines?)
Parce que:
- un nom de define n'a pas de portée (il est remplacé partout o ù il
apparait); c'est pour éviter les problèmes de conflit qu'ils sont mis
en majuscule (en général).
- un define peut être n'importe quoi - y compris un appel de
fonction couteux
- le nom d'un enum apparait dans gdb
- le compilo te dit quand tu oublie une valeur d'enum dans un switch
- un enum permet de contraindre les valeurs d'entrée aux valeurs
d'enum connu (pas int)
> - j'ai rajouté un peu de code dans les destructeurs des fonctions
> combat et personnage. Mais je sais pas si c'est propre ou pas.
Tu n'as pas besoin de tester si un pointeur est NULL pour appeler
delete dessus.
> Mais j'ai pas encore tout fini.
Un petit point de design:
Je pense que ton armurerie est un bon candidat pour le pattern
prototype. Au lieu de créer tes objets à la volée, tu les crées d ans
un conteneur initialisé au démarrage:
std::vector<Arme> armes_en_stock;
armes_en_stock.push_back(Arme("Lance", LANCE_DG));
armes_en_stock.push_back(Arme("Epée en Bronze", EPEE_BRONZE_DG));
...
Pour l'affichage, tu utilise une boucle et tu as directment accès à
une arme par son index:
for(size_t i=0;i<armes_en_stock;++i)
{
Arme& arme=armes_en_stock[i];
cout <<(i+1)<<" - "<<arme.getNom()<<" (dégats : "<<arme.getDegats()
<<" )n";
}
Puis pour un choix d'index:
Arme* arme=new Arme(armes_en_stock[i]);
Comme ça, quand tu ajoutes ou enlèves une arme, tu n'a pas besoin
d'aller faire des modifs partout ou de recalculer un index.
--
Michael
On 29 juil, 12:25, Beware <mathieu.hed...@gmail.com> wrote:
> Bonjour à tous,
> On dirait que mon message disant que je lisais le tuto du site du zero
> a déchainé les passions.
> Concernant mon programme suivant les conseils donnés :
> - j'ai changé les define par des enums (mais j'aimerais savoir en
> quoi il est mieux d'utiliser les enum que les defines?)
Parce que:
- un nom de define n'a pas de portée (il est remplacé partout o ù il
apparait); c'est pour éviter les problèmes de conflit qu'ils sont mis
en majuscule (en général).
- un define peut être n'importe quoi - y compris un appel de
fonction couteux
- le nom d'un enum apparait dans gdb
- le compilo te dit quand tu oublie une valeur d'enum dans un switch
- un enum permet de contraindre les valeurs d'entrée aux valeurs
d'enum connu (pas int)
> - j'ai rajouté un peu de code dans les destructeurs des fonctions
> combat et personnage. Mais je sais pas si c'est propre ou pas.
Tu n'as pas besoin de tester si un pointeur est NULL pour appeler
delete dessus.
> Mais j'ai pas encore tout fini.
Un petit point de design:
Je pense que ton armurerie est un bon candidat pour le pattern
prototype. Au lieu de créer tes objets à la volée, tu les crées d ans
un conteneur initialisé au démarrage:
std::vector<Arme> armes_en_stock;
armes_en_stock.push_back(Arme("Lance", LANCE_DG));
armes_en_stock.push_back(Arme("Epée en Bronze", EPEE_BRONZE_DG));
...
Pour l'affichage, tu utilise une boucle et tu as directment accès à
une arme par son index:
for(size_t i=0;i<armes_en_stock;++i)
{
Arme& arme=armes_en_stock[i];
cout <<(i+1)<<" - "<<arme.getNom()<<" (dégats : "<<arme.getDegats()
<<" )n";
}
Puis pour un choix d'index:
Arme* arme=new Arme(armes_en_stock[i]);
Comme ça, quand tu ajoutes ou enlèves une arme, tu n'a pas besoin
d'aller faire des modifs partout ou de recalculer un index.
--
Michael
On 29 juil, 12:25, Beware wrote:
> Bonjour à tous,
> On dirait que mon message disant que je lisais le tuto du site du zero
> a déchainé les passions.
> Concernant mon programme suivant les conseils donnés :
> - j'ai changé les define par des enums (mais j'aimerais savoir en
> quoi il est mieux d'utiliser les enum que les defines?)
Parce que:
- un nom de define n'a pas de portée (il est remplacé partout o ù il
apparait); c'est pour éviter les problèmes de conflit qu'ils sont mis
en majuscule (en général).
- un define peut être n'importe quoi - y compris un appel de
fonction couteux
- le nom d'un enum apparait dans gdb
- le compilo te dit quand tu oublie une valeur d'enum dans un switch
- un enum permet de contraindre les valeurs d'entrée aux valeurs
d'enum connu (pas int)
> - j'ai rajouté un peu de code dans les destructeurs des fonctions
> combat et personnage. Mais je sais pas si c'est propre ou pas.
Tu n'as pas besoin de tester si un pointeur est NULL pour appeler
delete dessus.
> Mais j'ai pas encore tout fini.
Un petit point de design:
Je pense que ton armurerie est un bon candidat pour le pattern
prototype. Au lieu de créer tes objets à la volée, tu les crées d ans
un conteneur initialisé au démarrage:
std::vector<Arme> armes_en_stock;
armes_en_stock.push_back(Arme("Lance", LANCE_DG));
armes_en_stock.push_back(Arme("Epée en Bronze", EPEE_BRONZE_DG));
...
Pour l'affichage, tu utilise une boucle et tu as directment accès à
une arme par son index:
for(size_t i=0;i<armes_en_stock;++i)
{
Arme& arme=armes_en_stock[i];
cout <<(i+1)<<" - "<<arme.getNom()<<" (dégats : "<<arme.getDegats()
<<" )n";
}
Puis pour un choix d'index:
Arme* arme=new Arme(armes_en_stock[i]);
Comme ça, quand tu ajoutes ou enlèves une arme, tu n'a pas besoin
d'aller faire des modifs partout ou de recalculer un index.
--
Michael
On 29 juil, 13:15, Michael Doubez wrote:
> On 29 juil, 12:25, Beware wrote:
> > Bonjour à tous,
> > On dirait que mon message disant que je lisais le tuto du site du zer o
> > a déchainé les passions.
> > Concernant mon programme suivant les conseils donnés :
> > - j'ai changé les define par des enums (mais j'aimerais savoir e n
> > quoi il est mieux d'utiliser les enum que les defines?)
> Parce que:
> - un nom de define n'a pas de portée (il est remplacé partout o ù il
> apparait); c'est pour éviter les problèmes de conflit qu'ils sont m is
> en majuscule (en général).
> - un define peut être n'importe quoi - y compris un appel de
> fonction couteux
> - le nom d'un enum apparait dans gdb
> - le compilo te dit quand tu oublie une valeur d'enum dans un switc h
> - un enum permet de contraindre les valeurs d'entrée aux valeurs
> d'enum connu (pas int)
> > - j'ai rajouté un peu de code dans les destructeurs des fonction s
> > combat et personnage. Mais je sais pas si c'est propre ou pas.
> Tu n'as pas besoin de tester si un pointeur est NULL pour appeler
> delete dessus.
> > Mais j'ai pas encore tout fini.
> Un petit point de design:
> Je pense que ton armurerie est un bon candidat pour le pattern
> prototype. Au lieu de créer tes objets à la volée, tu les crées dans
> un conteneur initialisé au démarrage:
> std::vector<Arme> armes_en_stock;
> armes_en_stock.push_back(Arme("Lance", LANCE_DG));
> armes_en_stock.push_back(Arme("Epée en Bronze", EPEE_BRONZE_DG));
> ...
> Pour l'affichage, tu utilise une boucle et tu as directment accès à
> une arme par son index:
> for(size_t i=0;i<armes_en_stock;++i)
> {
> Arme& arme=armes_en_stock[i];
> cout <<(i+1)<<" - "<<arme.getNom()<<" (dégats : "<<arme.getDegats ()
> <<" )n";
> }
> Puis pour un choix d'index:
> Arme* arme=new Arme(armes_en_stock[i]);
> Comme ça, quand tu ajoutes ou enlèves une arme, tu n'a pas besoin
> d'aller faire des modifs partout ou de recalculer un index.
> --
> Michael
Bonjour,
Merci pour ton aide.
Pour les detele , j'ai du mal comprendre ce que tu voulais dire par :
"tu fais un delete dans le destructeur de Personnage alors que m_arme
n'a pas été positionné. "
De plus, pourquoi vois tu la création du pointeur combat1 dans le main
comme étant un souci.
Je vais explorer ton idee pour l'armurerie. Je ne l'avais pas fait,
car je connais pas du tout
On 29 juil, 13:15, Michael Doubez <michael.dou...@free.fr> wrote:
> On 29 juil, 12:25, Beware <mathieu.hed...@gmail.com> wrote:
> > Bonjour à tous,
> > On dirait que mon message disant que je lisais le tuto du site du zer o
> > a déchainé les passions.
> > Concernant mon programme suivant les conseils donnés :
> > - j'ai changé les define par des enums (mais j'aimerais savoir e n
> > quoi il est mieux d'utiliser les enum que les defines?)
> Parce que:
> - un nom de define n'a pas de portée (il est remplacé partout o ù il
> apparait); c'est pour éviter les problèmes de conflit qu'ils sont m is
> en majuscule (en général).
> - un define peut être n'importe quoi - y compris un appel de
> fonction couteux
> - le nom d'un enum apparait dans gdb
> - le compilo te dit quand tu oublie une valeur d'enum dans un switc h
> - un enum permet de contraindre les valeurs d'entrée aux valeurs
> d'enum connu (pas int)
> > - j'ai rajouté un peu de code dans les destructeurs des fonction s
> > combat et personnage. Mais je sais pas si c'est propre ou pas.
> Tu n'as pas besoin de tester si un pointeur est NULL pour appeler
> delete dessus.
> > Mais j'ai pas encore tout fini.
> Un petit point de design:
> Je pense que ton armurerie est un bon candidat pour le pattern
> prototype. Au lieu de créer tes objets à la volée, tu les crées dans
> un conteneur initialisé au démarrage:
> std::vector<Arme> armes_en_stock;
> armes_en_stock.push_back(Arme("Lance", LANCE_DG));
> armes_en_stock.push_back(Arme("Epée en Bronze", EPEE_BRONZE_DG));
> ...
> Pour l'affichage, tu utilise une boucle et tu as directment accès à
> une arme par son index:
> for(size_t i=0;i<armes_en_stock;++i)
> {
> Arme& arme=armes_en_stock[i];
> cout <<(i+1)<<" - "<<arme.getNom()<<" (dégats : "<<arme.getDegats ()
> <<" )n";
> }
> Puis pour un choix d'index:
> Arme* arme=new Arme(armes_en_stock[i]);
> Comme ça, quand tu ajoutes ou enlèves une arme, tu n'a pas besoin
> d'aller faire des modifs partout ou de recalculer un index.
> --
> Michael
Bonjour,
Merci pour ton aide.
Pour les detele , j'ai du mal comprendre ce que tu voulais dire par :
"tu fais un delete dans le destructeur de Personnage alors que m_arme
n'a pas été positionné. "
De plus, pourquoi vois tu la création du pointeur combat1 dans le main
comme étant un souci.
Je vais explorer ton idee pour l'armurerie. Je ne l'avais pas fait,
car je connais pas du tout
On 29 juil, 13:15, Michael Doubez wrote:
> On 29 juil, 12:25, Beware wrote:
> > Bonjour à tous,
> > On dirait que mon message disant que je lisais le tuto du site du zer o
> > a déchainé les passions.
> > Concernant mon programme suivant les conseils donnés :
> > - j'ai changé les define par des enums (mais j'aimerais savoir e n
> > quoi il est mieux d'utiliser les enum que les defines?)
> Parce que:
> - un nom de define n'a pas de portée (il est remplacé partout o ù il
> apparait); c'est pour éviter les problèmes de conflit qu'ils sont m is
> en majuscule (en général).
> - un define peut être n'importe quoi - y compris un appel de
> fonction couteux
> - le nom d'un enum apparait dans gdb
> - le compilo te dit quand tu oublie une valeur d'enum dans un switc h
> - un enum permet de contraindre les valeurs d'entrée aux valeurs
> d'enum connu (pas int)
> > - j'ai rajouté un peu de code dans les destructeurs des fonction s
> > combat et personnage. Mais je sais pas si c'est propre ou pas.
> Tu n'as pas besoin de tester si un pointeur est NULL pour appeler
> delete dessus.
> > Mais j'ai pas encore tout fini.
> Un petit point de design:
> Je pense que ton armurerie est un bon candidat pour le pattern
> prototype. Au lieu de créer tes objets à la volée, tu les crées dans
> un conteneur initialisé au démarrage:
> std::vector<Arme> armes_en_stock;
> armes_en_stock.push_back(Arme("Lance", LANCE_DG));
> armes_en_stock.push_back(Arme("Epée en Bronze", EPEE_BRONZE_DG));
> ...
> Pour l'affichage, tu utilise une boucle et tu as directment accès à
> une arme par son index:
> for(size_t i=0;i<armes_en_stock;++i)
> {
> Arme& arme=armes_en_stock[i];
> cout <<(i+1)<<" - "<<arme.getNom()<<" (dégats : "<<arme.getDegats ()
> <<" )n";
> }
> Puis pour un choix d'index:
> Arme* arme=new Arme(armes_en_stock[i]);
> Comme ça, quand tu ajoutes ou enlèves une arme, tu n'a pas besoin
> d'aller faire des modifs partout ou de recalculer un index.
> --
> Michael
Bonjour,
Merci pour ton aide.
Pour les detele , j'ai du mal comprendre ce que tu voulais dire par :
"tu fais un delete dans le destructeur de Personnage alors que m_arme
n'a pas été positionné. "
De plus, pourquoi vois tu la création du pointeur combat1 dans le main
comme étant un souci.
Je vais explorer ton idee pour l'armurerie. Je ne l'avais pas fait,
car je connais pas du tout
On 29 juil, 16:05, Beware wrote:
> On 29 juil, 13:15, Michael Doubez wrote:
> > On 29 juil, 12:25, Beware wrote:
> > > Bonjour à tous,
> > > On dirait que mon message disant que je lisais le tuto du site du z ero
> > > a déchainé les passions.
> > > Concernant mon programme suivant les conseils donnés :
> > > - j'ai changé les define par des enums (mais j'aimerais savoir en
> > > quoi il est mieux d'utiliser les enum que les defines?)
> > Parce que:
> > - un nom de define n'a pas de portée (il est remplacé partout où il
> > apparait); c'est pour éviter les problèmes de conflit qu'ils sont mis
> > en majuscule (en général).
> > - un define peut être n'importe quoi - y compris un appel de
> > fonction couteux
> > - le nom d'un enum apparait dans gdb
> > - le compilo te dit quand tu oublie une valeur d'enum dans un swi tch
> > - un enum permet de contraindre les valeurs d'entrée aux valeur s
> > d'enum connu (pas int)
> > > - j'ai rajouté un peu de code dans les destructeurs des foncti ons
> > > combat et personnage. Mais je sais pas si c'est propre ou pas.
> > Tu n'as pas besoin de tester si un pointeur est NULL pour appeler
> > delete dessus.
> > > Mais j'ai pas encore tout fini.
> > Un petit point de design:
> > Je pense que ton armurerie est un bon candidat pour le pattern
> > prototype. Au lieu de créer tes objets à la volée, tu les cré es dans
> > un conteneur initialisé au démarrage:
> > std::vector<Arme> armes_en_stock;
> > armes_en_stock.push_back(Arme("Lance", LANCE_DG));
> > armes_en_stock.push_back(Arme("Epée en Bronze", EPEE_BRONZE_DG));
> > ...
> > Pour l'affichage, tu utilise une boucle et tu as directment accès à
> > une arme par son index:
> > for(size_t i=0;i<armes_en_stock;++i)
> > {
> > Arme& arme=armes_en_stock[i];
> > cout <<(i+1)<<" - "<<arme.getNom()<<" (dégats : "<<arme.getDega ts()
> > <<" )n";
> > }
> > Puis pour un choix d'index:
> > Arme* arme=new Arme(armes_en_stock[i]);
> > Comme ça, quand tu ajoutes ou enlèves une arme, tu n'a pas besoin
> > d'aller faire des modifs partout ou de recalculer un index.
> > --
> > Michael
> Bonjour,
> Merci pour ton aide.
> Pour les detele , j'ai du mal comprendre ce que tu voulais dire par :
> "tu fais un delete dans le destructeur de Personnage alors que m_arme
> n'a pas été positionné. "
Dans le constructeur, tu ne mettais pas m_arme à NULL donc il pouvait
prendre une valeur quelconque qui aurait été utilisée dans le
destructeur par delete. Un candidat au segfault.
Soit tu l'as modifié, soit j'avais mal vu parce qu'il est bien mis à
NULL dans la dernière version.
> De plus, pourquoi vois tu la création du pointeur combat1 dans le mai n
> comme étant un souci.
Ce n'est pas un problème mais dans la mesure où tu n'as pas besoin de
detruire/recréer combat1, il n'y a pas de raison de l'allouer par un
new (et ça t'évite un delete qui d'ailleurs est bizarrement placé).
> Je vais explorer ton idee pour l'armurerie. Je ne l'avais pas fait,
> car je connais pas du tout
Le but est d'éviter des opérations fastidieuses.
--
Michael
On 29 juil, 16:05, Beware <mathieu.hed...@gmail.com> wrote:
> On 29 juil, 13:15, Michael Doubez <michael.dou...@free.fr> wrote:
> > On 29 juil, 12:25, Beware <mathieu.hed...@gmail.com> wrote:
> > > Bonjour à tous,
> > > On dirait que mon message disant que je lisais le tuto du site du z ero
> > > a déchainé les passions.
> > > Concernant mon programme suivant les conseils donnés :
> > > - j'ai changé les define par des enums (mais j'aimerais savoir en
> > > quoi il est mieux d'utiliser les enum que les defines?)
> > Parce que:
> > - un nom de define n'a pas de portée (il est remplacé partout où il
> > apparait); c'est pour éviter les problèmes de conflit qu'ils sont mis
> > en majuscule (en général).
> > - un define peut être n'importe quoi - y compris un appel de
> > fonction couteux
> > - le nom d'un enum apparait dans gdb
> > - le compilo te dit quand tu oublie une valeur d'enum dans un swi tch
> > - un enum permet de contraindre les valeurs d'entrée aux valeur s
> > d'enum connu (pas int)
> > > - j'ai rajouté un peu de code dans les destructeurs des foncti ons
> > > combat et personnage. Mais je sais pas si c'est propre ou pas.
> > Tu n'as pas besoin de tester si un pointeur est NULL pour appeler
> > delete dessus.
> > > Mais j'ai pas encore tout fini.
> > Un petit point de design:
> > Je pense que ton armurerie est un bon candidat pour le pattern
> > prototype. Au lieu de créer tes objets à la volée, tu les cré es dans
> > un conteneur initialisé au démarrage:
> > std::vector<Arme> armes_en_stock;
> > armes_en_stock.push_back(Arme("Lance", LANCE_DG));
> > armes_en_stock.push_back(Arme("Epée en Bronze", EPEE_BRONZE_DG));
> > ...
> > Pour l'affichage, tu utilise une boucle et tu as directment accès à
> > une arme par son index:
> > for(size_t i=0;i<armes_en_stock;++i)
> > {
> > Arme& arme=armes_en_stock[i];
> > cout <<(i+1)<<" - "<<arme.getNom()<<" (dégats : "<<arme.getDega ts()
> > <<" )n";
> > }
> > Puis pour un choix d'index:
> > Arme* arme=new Arme(armes_en_stock[i]);
> > Comme ça, quand tu ajoutes ou enlèves une arme, tu n'a pas besoin
> > d'aller faire des modifs partout ou de recalculer un index.
> > --
> > Michael
> Bonjour,
> Merci pour ton aide.
> Pour les detele , j'ai du mal comprendre ce que tu voulais dire par :
> "tu fais un delete dans le destructeur de Personnage alors que m_arme
> n'a pas été positionné. "
Dans le constructeur, tu ne mettais pas m_arme à NULL donc il pouvait
prendre une valeur quelconque qui aurait été utilisée dans le
destructeur par delete. Un candidat au segfault.
Soit tu l'as modifié, soit j'avais mal vu parce qu'il est bien mis à
NULL dans la dernière version.
> De plus, pourquoi vois tu la création du pointeur combat1 dans le mai n
> comme étant un souci.
Ce n'est pas un problème mais dans la mesure où tu n'as pas besoin de
detruire/recréer combat1, il n'y a pas de raison de l'allouer par un
new (et ça t'évite un delete qui d'ailleurs est bizarrement placé).
> Je vais explorer ton idee pour l'armurerie. Je ne l'avais pas fait,
> car je connais pas du tout
Le but est d'éviter des opérations fastidieuses.
--
Michael
On 29 juil, 16:05, Beware wrote:
> On 29 juil, 13:15, Michael Doubez wrote:
> > On 29 juil, 12:25, Beware wrote:
> > > Bonjour à tous,
> > > On dirait que mon message disant que je lisais le tuto du site du z ero
> > > a déchainé les passions.
> > > Concernant mon programme suivant les conseils donnés :
> > > - j'ai changé les define par des enums (mais j'aimerais savoir en
> > > quoi il est mieux d'utiliser les enum que les defines?)
> > Parce que:
> > - un nom de define n'a pas de portée (il est remplacé partout où il
> > apparait); c'est pour éviter les problèmes de conflit qu'ils sont mis
> > en majuscule (en général).
> > - un define peut être n'importe quoi - y compris un appel de
> > fonction couteux
> > - le nom d'un enum apparait dans gdb
> > - le compilo te dit quand tu oublie une valeur d'enum dans un swi tch
> > - un enum permet de contraindre les valeurs d'entrée aux valeur s
> > d'enum connu (pas int)
> > > - j'ai rajouté un peu de code dans les destructeurs des foncti ons
> > > combat et personnage. Mais je sais pas si c'est propre ou pas.
> > Tu n'as pas besoin de tester si un pointeur est NULL pour appeler
> > delete dessus.
> > > Mais j'ai pas encore tout fini.
> > Un petit point de design:
> > Je pense que ton armurerie est un bon candidat pour le pattern
> > prototype. Au lieu de créer tes objets à la volée, tu les cré es dans
> > un conteneur initialisé au démarrage:
> > std::vector<Arme> armes_en_stock;
> > armes_en_stock.push_back(Arme("Lance", LANCE_DG));
> > armes_en_stock.push_back(Arme("Epée en Bronze", EPEE_BRONZE_DG));
> > ...
> > Pour l'affichage, tu utilise une boucle et tu as directment accès à
> > une arme par son index:
> > for(size_t i=0;i<armes_en_stock;++i)
> > {
> > Arme& arme=armes_en_stock[i];
> > cout <<(i+1)<<" - "<<arme.getNom()<<" (dégats : "<<arme.getDega ts()
> > <<" )n";
> > }
> > Puis pour un choix d'index:
> > Arme* arme=new Arme(armes_en_stock[i]);
> > Comme ça, quand tu ajoutes ou enlèves une arme, tu n'a pas besoin
> > d'aller faire des modifs partout ou de recalculer un index.
> > --
> > Michael
> Bonjour,
> Merci pour ton aide.
> Pour les detele , j'ai du mal comprendre ce que tu voulais dire par :
> "tu fais un delete dans le destructeur de Personnage alors que m_arme
> n'a pas été positionné. "
Dans le constructeur, tu ne mettais pas m_arme à NULL donc il pouvait
prendre une valeur quelconque qui aurait été utilisée dans le
destructeur par delete. Un candidat au segfault.
Soit tu l'as modifié, soit j'avais mal vu parce qu'il est bien mis à
NULL dans la dernière version.
> De plus, pourquoi vois tu la création du pointeur combat1 dans le mai n
> comme étant un souci.
Ce n'est pas un problème mais dans la mesure où tu n'as pas besoin de
detruire/recréer combat1, il n'y a pas de raison de l'allouer par un
new (et ça t'évite un delete qui d'ailleurs est bizarrement placé).
> Je vais explorer ton idee pour l'armurerie. Je ne l'avais pas fait,
> car je connais pas du tout
Le but est d'éviter des opérations fastidieuses.
--
Michael