Copie d'une variable

Discutez d'informatique ici !
Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

par fatal_error » 11 Nov 2014, 17:13

déjà je suis surpris par string const.
const string à la rigueur.

Ensuite, si, string est une struct (templaté), mais tu peux considérer que c'est une classe.

nomFichier reçoit c_str(),

sur deux lignes de codes t'arrives à pas être clair. nulle part il y a nomFichier qui recoit c_str().

nomFichier ne devient pas non plus nomFichier.c_str()? ou as-tu vu ca???
as tu vu un quelconque nomFichier = nomFichier.c_str()?

monFlux est bien une variable...
elle est de type flux.

ofstream est une classe qui te permet d'écrire dans un fichier.
assez intuitivement, tu ouvres le fichier nomFichier en écriture (grace à ofstream), et tu écris dans ce fichier grace à monFlux
la vie est une fête :)



barbu23
Membre Transcendant
Messages: 5466
Enregistré le: 18 Fév 2007, 18:04

par barbu23 » 11 Nov 2014, 17:26

fatal_error a écrit:
Ensuite, si, string est une struct (templaté), mais tu peux considérer que c'est une classe.

J'aimerai ne pas parler de classes pour le moment car je n'ai aucune connaissance en POO. Je l'ai pas encore appris. :dodo:

sur deux lignes de codes t'arrives à pas être clair. nulle part il y a nomFichier qui recoit c_str().

nomFichier ne devient pas non plus nomFichier.c_str()? ou as-tu vu ca???
as tu vu un quelconque nomFichier = nomFichier.c_str()?

http://openclassrooms.com/courses/programmez-avec-le-langage-c/lire-et-modifier-des-fichiers
ofstream est une classe qui te permet d'écrire dans un fichier. ( Je ne comprends pas ces choses là :hum: )
assez intuitivement, tu ouvres le fichier nomFichier en écriture (grace à ofstream), et tu écris dans ce fichier grace à monFlux

Merci. :happy3:

Cliffe
Membre Rationnel
Messages: 967
Enregistré le: 12 Juin 2012, 14:25

par Cliffe » 11 Nov 2014, 17:49

fatal_error a écrit:déjà je suis surpris par string const.


Où est le problème :doh:
le const porte sur ce qui est a gauche, donc pour quelqu'un qui apprend le c++ c'est très bien comme ça.

barbu23
Membre Transcendant
Messages: 5466
Enregistré le: 18 Fév 2007, 18:04

par barbu23 » 11 Nov 2014, 18:15

Code: Tout sélectionner
string const nomFichier("C:/Nanoc/Scores.txt");
ofstream monFlux(nomFichier.c_str());


Je n'ai pas encore compris comment fonctionnent concrètement ces deux lignes. :mur:
Qu'est ce qu'elle fait la première ligne et qu'est ce qu'elle fait la deuxième ligne successivement et distinctement ?.
Pourquoi la variable nomFichier envoie un string ( une chaîne de caractères ) ?

Merci d'avance.

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

par fatal_error » 11 Nov 2014, 18:23

Où est le problème

le problème c'est que nulle part on voit cette syntaxe.
la pluspart du temps on verra un const std::string &s
mais un std::string const &s, c'est assez byzarre.

C'est d'autant plus byzarre pour des pointeurs.
On verra souvent const char* s, mais char* const s c'st déjà moins intéressant,

Je n'ai pas encore compris comment fonctionnent concrètement ces deux lignes.
Qu'est ce qu'elle fait la première ligne et qu'est ce qu'elle fait la deuxième ligne successivement et distinctement ?.

lis le tutoriel que tu as pointé et poses une question (plus) précise.


Pourquoi la variable nomFichier envoie un string ( une chaîne de caractères ) ?

ne veut rien dire.
la vie est une fête :)

barbu23
Membre Transcendant
Messages: 5466
Enregistré le: 18 Fév 2007, 18:04

par barbu23 » 11 Nov 2014, 18:29

Ah j'ai compris, j'ai cru que c'était une fonction, donc : nomFichier reçoit un string, elle reçoit le nom du fichier, non ?
Dans le tuto plus haut, il n'est pas précisé la rôle de : nomFichier.c_str(); Pouvez vous me dire à quoi elle sert cette fonctionnalité ?
Merci d'avance. :happy3:

Cliffe
Membre Rationnel
Messages: 967
Enregistré le: 12 Juin 2012, 14:25

par Cliffe » 11 Nov 2014, 18:47

fatal_error a écrit:mais un std::string const &s, c'est assez byzarre.


Il n'y a rien de bizarre, je vois ça partout et c'est l'écriture correcte par défaut.


fatal_error a écrit:On verra souvent const char* s, mais char* const s c'st déjà moins intéressant,


C'est pas la mm chose :lol3:


Code: Tout sélectionner
    char a = 'a';
    char b = 'b';
    const char * s1 = &a;
    char * const s2 = &a;

    *s1 = 'c'; // erreur car char constant
    s1 = &b;

    *s2 = 'c';
    s2 = &b;   // erreur car pointeur constant


Il faut revoir les const :we:

barbu23
Membre Transcendant
Messages: 5466
Enregistré le: 18 Fév 2007, 18:04

par barbu23 » 11 Nov 2014, 19:15

Donc, on ouvre grâce à : nomFichier, et on écrit grâce à : monFlux, non ?
Cordialement. :happy3:

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

par fatal_error » 11 Nov 2014, 20:00

C'est pas la mm chose

évidemment si je dis que c'est moins intéressant :hum:

Il faut revoir les const

la question n'est pas tellement d'ordre technique mais d'utilité.

Je sais pas dans quel environnement tu travailles, mais généralement je me répète, on utilise du const type &f ou du const type* f, n'importe quelle source github de cpp, v8 ou je sais pas quoi d'autres.

nomFichier reçoit un string, elle reçoit le nom du fichier, non ?
Dans le tuto plus haut, il n'est pas précisé la rôle de : nomFichier.c_str(); Pouvez vous me dire à quoi elle sert cette fonctionnalité ?

exact.
c_str est une méthode de string.
elle retourne l'équivalent de string sous forme de const char* (chaine que tu ne dois pas modifier)
la vie est une fête :)

barbu23
Membre Transcendant
Messages: 5466
Enregistré le: 18 Fév 2007, 18:04

par barbu23 » 13 Nov 2014, 13:09

Bonjour à tous, :happy3:

Pourriez vous m'expliquer le code suivant :
Code: Tout sélectionner
Personnage::Personnage()
{
    m_vie = 100;
    m_mana = 100;
    m_nomArme = "Épée rouillée";
    m_degatsArme = 10;
}

Je tiens à préciser que : Personnage(); est un destructeur qui appartient à une classe de même nom, c'est à dire : Personnage.
Je ne comprends pas plus exactement la ligne suivante : Personnage::Personnage() , de quoi il s'agit exactement ? et pourquoi deux de : deux points séparant Personnage et Personnage ?
Ce code est introduit pour expliquer qu'est ce que c'est la programmation orientée objets.

Merci d'avance. :happy3:

joel76
Membre Relatif
Messages: 230
Enregistré le: 11 Fév 2013, 16:31

par joel76 » 13 Nov 2014, 14:08

A mon avis, ce n'est pas un destructeur mais un constructeur, il y a initialisation des attributs du personnage
Il me semble que les destructeurs s'écrivent Personnage::~Personnage().
Les 2 fois 2 points signifient que c'est une méthode attachée à la classe (ici Personnage).

Avatar de l’utilisateur
Rockleader
Habitué(e)
Messages: 2126
Enregistré le: 11 Oct 2011, 19:42

par Rockleader » 13 Nov 2014, 19:16

joel76 a écrit:A mon avis, ce n'est pas un destructeur mais un constructeur, il y a initialisation des attributs du personnage
Il me semble que les destructeurs s'écrivent Personnage::~Personnage().
Les 2 fois 2 points signifient que c'est une méthode attachée à la classe (ici Personnage).


J"connais pas la POO en C, mais à mon avis aussi c'est un Constructeur.

A vrai dire destructeurs je ne savais même pas que ça existait O_o mais je me suis jamais posé la question de ce que l'on faisait d'un objet une fois inutile^^



Sinon de façon générale de ce que j'en ai vu en java, en POO il y a une sorte de convention qui veut que le nom de la méthode de construction porte le même nom que ta classe.

Donc en fait, Personnage ça doit être le type de ta classe, retourné ou non je sais pas comment ça marche; et après les deux points ce n'est ni plus ni moins que le nom de la méthode mais tu aurais très bien pu appeler ça constructeurDePersonnage()
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

par fatal_error » 13 Nov 2014, 21:29

salut,

déjà on s'en tape de java.
ensuite joel a tout dit,
et pour éviter de faire le bof qui intervient pour casser du Rock, le :: fait référence à l'appartenance à un namespace (ici class, mais marche également avec struct et ...namespace)
la vie est une fête :)

barbu23
Membre Transcendant
Messages: 5466
Enregistré le: 18 Fév 2007, 18:04

par barbu23 » 13 Nov 2014, 22:44

Bonsoir,

Merci à vous trois pour ces précisions. :happy3:
Je me permets de poser une autre question :
J'ai la chose suivante ( pas dans l'ordre ) :

- Constructeur sans paramètres :

Code: Tout sélectionner
Personnage::Personnage()
{
    m_vie = 100;
    m_mana = 100;
    m_nomArme = "Épée rouillée";
    m_degatsArme = 10;
}

Code: Tout sélectionner
#include
 
class Personnage
{
    public:
 
    Personnage(); //Constructeur
    void recevoirDegats(int nbDegats);
    void attaquer(Personnage &cible);
    void boirePotionDeVie(int quantitePotion);
    void changerArme(std::string nomNouvelleArme, int degatsNouvelleArme);
    bool estVivant();
 
 
    private:
 
    int m_vie;
    int m_mana;
    std::string m_nomArme;
    int m_degatsArme;
};

Code: Tout sélectionner
Personnage goliath("Épée aiguisée", 20);  //On crée goliath en utilisant un constructeur normal
Personnage david(goliath);     


- Constructeur avec paramètres ( il me semble ! :dodo: ) :
Code: Tout sélectionner
Personnage::Personnage(Personnage const& autre): m_vie(autre.m_vie), m_mana(autre.m_mana), m_nomArme(autre.m_nomArme), m_degatsArme(autre.m_degatsArme)
{
}


Question :

- Quelle est la différence entre le premier constructeur défini sans paramètres, et la dernière partie du code çi dessus ? ( Je ne comprends pas le fonctionnement du dernier code que j'ai cité çi dessus :cry: , merci d'avance pour votre éclairage )
- Pourquoi la variable goliath prend deux paramètres ? Comment savoir le nombre de paramètres qu'on peux créer et leurs noms ?
- Pourquoi la variable david prend en paramètres la variable : goliath ?

Merci d'avance. :happy3:

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

par fatal_error » 13 Nov 2014, 22:53

trop de notions mélées.
fais un code simple qui isole ta question en premier lieu
la vie est une fête :)

barbu23
Membre Transcendant
Messages: 5466
Enregistré le: 18 Fév 2007, 18:04

par barbu23 » 13 Nov 2014, 23:04

fatal_error a écrit:trop de notions mélées.
fais un code simple qui isole ta question en premier lieu

C'est écrit ici : http://openclassrooms.com/courses/programmez-avec-le-langage-c/les-classes-partie-2-2
Bref, je ne sais pas le lien entre :
Code: Tout sélectionner
Personnage::Personnage()
{
    m_vie = 100;
    m_mana = 100;
    m_nomArme = "Épée rouillée";
    m_degatsArme = 10;
}

Code: Tout sélectionner
#include
 
class Personnage
{
    public:
 
    Personnage(); //Constructeur
    void recevoirDegats(int nbDegats);
    void attaquer(Personnage &cible);
    void boirePotionDeVie(int quantitePotion);
    void changerArme(std::string nomNouvelleArme, int degatsNouvelleArme);
    bool estVivant();
 
 
    private:
 
    int m_vie;
    int m_mana;
    std::string m_nomArme;
    int m_degatsArme;
};

Code: Tout sélectionner
Personnage goliath("Épée aiguisée", 20);  //On crée goliath en utilisant un constructeur normal
Personnage david(goliath);     

et :
Code: Tout sélectionner
Personnage::Personnage(Personnage const& autre): m_vie(autre.m_vie), m_mana(autre.m_mana), m_nomArme(autre.m_nomArme), m_degatsArme(autre.m_degatsArme)
{
}

Pouvez vous me les expliquer ?
Merci d'avance. :happy3:

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

par fatal_error » 13 Nov 2014, 23:09

ya til besoin que l'on sache que
attaquer(...)
existe?
la vie est une fête :)

barbu23
Membre Transcendant
Messages: 5466
Enregistré le: 18 Fév 2007, 18:04

par barbu23 » 13 Nov 2014, 23:12

Je n'ai pas compris. Peux être plus précis stp ?
Merci d'avance.

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

par fatal_error » 13 Nov 2014, 23:14

penses tu que la ligne
Code: Tout sélectionner
    void attaquer(Personnage &cible);

ait un lien avec ton problème?
la vie est une fête :)

barbu23
Membre Transcendant
Messages: 5466
Enregistré le: 18 Fév 2007, 18:04

par barbu23 » 13 Nov 2014, 23:22

oui.
Tu construis une fonction qui reçoit un objet défini par la classe Personnage et qui ne renvoit rien, Donc, ta fonction est une suite d'actions tout simplement, il me semble, non ?
Mais, je ne comprends pas ou tu veux en venir. :we:

 

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 9 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite