Je me lance tout juste dans le C++ en suivant le cours du site et j'en suis à la partie sur la surcharge de constructeur, j'ai essayé de recoder de mémoire l'exemple pour m'entrainer en adaptant un peu le thème et j'ai fait ça:
Pokemon.h
#ifndef POKEMON_H
#define POKEMON_H
#include <string>
class Pokemon
{
public:
Pokemon();
Pokemon(int pointDeVie, int vitesse, std::string nomAttaque, int degatsAttaque);
void attaque(Pokemon &cible);
bool estVivant();
int vitesse();
void perdreVie(int degatsAttaque);
private:
int m_pointDeVie;
int m_vitesse;
std::string m_nomAttaque;
int m_degatsAttaque;
};
#endif
#include <iostream>
#include "Pokemon.h"
using namespace std;
int main()
{
Pokemon pikachu(35, 90, "Eclair", 40), evoli(55, 55, "Charge", 40);
// Pokemon pikachu, evoli;
cout << pikachu.vitesse() << evoli.vitesse() << endl;
if (pikachu.vitesse() >= evoli.vitesse())
{
cout << "lol" << endl;
while (pikachu.estVivant() && evoli.estVivant())
{
pikachu.attaque(evoli);
if (!evoli.estVivant())
{
cout << "Pikachu a gagné" << endl;
return 0;
}
evoli.attaque(pikachu);
if (!pikachu.estVivant())
{
cout << "Evoli a gagné" << endl;
return 0;
}
}
}
else
{
while (pikachu.estVivant() && evoli.estVivant())
{
evoli.attaque(pikachu);
if (!pikachu.estVivant())
{
cout << "Evoli a gagné" << endl;
return 0;
}
pikachu.attaque(evoli);
if (!evoli.estVivant())
{
cout << "Pikachu a gagné" << endl;
return 0;
}
}
}
return 0;
}
Visiblement ça marche quand j'utilise le constructeur par défaut mais si j'utilise le deuxième constructeur le programme n'affecte pas la valeur indiquée à "vitesse" (seul paramètre que je peux tester vu que j'ai une méthode pour ça) et affecte la valeur 0 à celle de Pikachu et la valeur 32765 à celle d'Evoli, par ailleurs ça affiche aléatoire "pikachu a gagné", parfois ça le met, parfois non.
J'ai bien sûr essayé de recomparer avec l''exemple du cours après coup mais j'arrive pas à voir ce que j'ai fait différemment, c'est sûrement tout bête mais je vois pas :/
à recoder dans l'autre sens, avec une délégation de constructeur (C++11).
Le constructeur avec paramètre fait le boulot laborieux d'initialisation des champs un par un, le constructeur par défaut lui fournit les valeurs par défaut. Chacun son job, inutile de faire deux fois le boulot.
Utiliser de préférence l'initialisation uniforme avec { }.
J'ai lu que tu suis le cours c++ de ce site... Il est obsolète(basé sur un standard ancien) et non ce n'est pas un troll. Suis plutôt le cours de Guillaume Belz (alias GBdivers sur ce forum) tu y gagneras : http://guillaume.belz.free.fr/doku.php?id=start
ce dernier cours est basé sur les derniers standards du c++ (c++14 / c++17).
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
En recherche d'emploi.
Mon site web de jeux SDL2 entre autres : https://www.ant01.fr