vieet
magiesont déclarées dans le constructeur et donc n'existent que pendant la fonction de construction. Si tu souhaites que tes variables aient la même durée de vie qu'un
Personnage, il faut les déclarer dans la structure
Personnage.
main()car tu as mis le constructeur dans la zone
private. Donc seul un
Personnagepeut créer un
Personnage! Peut-être que mettre le constructeur dans la zone
publicserait préférable.
class Personage { public: Personage() //construteur sans variable dedans { } void dega(int puissance) { vie = vie - puissance; } private: int vie = 100; //variable a initialiser avec le constructeur mais en private int magie = 100; }; int main() { Personage maxence; }
class Personage { public: Personage(); // personage(ALL) le construteur initialise tout les types int,char,double personage(int,int); //recherche la fonction exterieur avec 2 int a quelle moment les int private dynamique ce crée ? void dega(int puissance) { vie = vie - puissance; } private: int vie = 100; //definie en static int magie = 100; //******************************************************************************* int vie ; //definie en dynamique int magie ; }; personage::personage(int vie,int magie) { //code modife variable private dynamique } int main() { personage maxence; //static l'objet prendra le constructeur ALL initialisation static Personage maxence(100,100); //dynamique l'objet prendra le constructeur 2 int initialisation dynamique définit en paramètre personage *maxence = new personage(100,100); //dynamique l'objet prendra le constructeur 2 int quelle est la différence des 2 dynamiques }
#include <iostream> #include <string> using namespace std; class personage { public: personage(int,int); //le construteur fait un overflow controler dans la class en fonction void affiche(); void dega(int puissance) //les fonction et les if et les tableaux fonctionne dans le public { vie = vie - puissance; cout << "vous prenez tand de dega : " << puissance << endl; cout << "niveau de vie : " << vie << endl << "voulez-vous de la potion magique ? oui : o non: n : " << endl; cin >> cache; if (cache[0] == 'o') { vie = vie + magie; cout << "niveau de vie : " << vie << endl; } } private: char cache[1]; int vie; int magie; }; personage::personage(int vie,int magie) //les fonctions en dehors de la class avec un pointeur personage::personage elles sont apeller par la fonction dans le public et passe en dehors du public pour lire les arguments dans le .ccp { this->vie = vie; this->magie = magie; } void personage::affiche() { cout << vie << endl; cout << magie << endl; } int main() { personage maxence(100,100); //constructeur dynamique ? personage maxence(int var, int var) maxence.affiche(); maxence.dega(5); personage*thomas = new personage(80,80); //constructeur dynamique (*thomas).affiche(); maxence.affiche(); cout << "les deux objets prend 2 case en memoire" << endl; cout << thomas << endl; //adresse de l'obet sans * cout << &maxence; //adresse de l'objet avec & //donc il y a bien 6variable donc 3 variables virtuelles alouées au niveau code source et 3 physique ecrit en code source donc au final au niveau de la ram il y a 6 bits pour une var = 1 bits dans 2 case memoires 2 objet différent }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionstatic: elle existe pendant toute la durée du programme.
static.
newcar il faut utiliser
deletepour détruire la variable, et on risque fort de se gourrer. Sinon il faut utiliser des objets qui s'occupent de ça pour nous. Par exemple
std::vector<>ou un "smart pointer" comme
std::unique_ptr<>.
class personage { public: personage(int vie, int magie) : vie_{vie}, magie_{magie} { // magie_ et vie_ ont été initialisées avant } void affiche()const { std::cout << "vie: " << vie_ << "magie: " << magie << std::endl; } static personnage perso1; // déclaration membre static private: int vie_; // variable membre int magie_; }; personnage personnage::perso1(11,11); // définition membre static personnage perso2( 12, 12 ); // global int main() { static personnage perso3(13,13); // static est créé avant d'entrer dans main personnage perso4(14,14); // automatique auto pperso5 = std::make_unique<personnage>( 15, 15 ); // dynamique pperso5 est propriétaire d'un personnage personnage::perso1.affiche(); perso2.affiche(); perso3.affiche(); perso4.affiche(); pperso5->affiche(); } // à cet instant disparaissent pperso5 et perso4, // et comme pperso5 est propriétaire d'un personnage celui-ci disparaît avec lui. // à la fin du programme disparaissent perso3, perso2 et personnage::perso1