C++
Fermé
gilles81
Messages postés
67
Date d'inscription
mardi 20 mai 2008
Statut
Membre
Dernière intervention
29 juillet 2009
-
4 nov. 2008 à 23:31
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 5 nov. 2008 à 09:41
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 5 nov. 2008 à 09:41
3 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
4 nov. 2008 à 23:38
4 nov. 2008 à 23:38
En utilisant strncpy pour les char* et l'affection pour les integer.
Par exemple :
Remarque, j'ai changé le nom de tes arguments dans ton constructeur pour éviter qu'ils aient le même nom que tes attributs. Si tu veux vraiment laisser le même nom, dans ce cas tu devras utiliser l'opérateur this.
Cdlt
Par exemple :
CSpieler(char* vor, char* nachname, char* geboren, unsigned int gro, unsigned int gewich){ strncpy(vor,vorname,cMaxStrLength); groesse_cm=gro; etc. }
Remarque, j'ai changé le nom de tes arguments dans ton constructeur pour éviter qu'ils aient le même nom que tes attributs. Si tu veux vraiment laisser le même nom, dans ce cas tu devras utiliser l'opérateur this.
Cdlt
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
5 nov. 2008 à 00:15
5 nov. 2008 à 00:15
Oui char* est un pointeur. D'ailleurs tu aurais pu utiliser string au lieu de char*.
Mais en fait, là il ne s'agit pas d'allouer la mémoire avec new, car elle est déjà allouée statiquement lorsque tu as fait :
char vorname[cMaxStrLength]; cela a alloué dans la pile cMaxStrLength bytes. Donc pas besoin de l'opérateur new.
strncpy(destination, source, taille) est la version sécurisée de strcpy qui permet de copier la chaîne pointée par source dans celle pointée par destination en se limitant à taille octets.
D'ailleurs, lorsque tu utilises :
strncpy(vorname,vor,sizeof(vorname));
vorname[cMaxStrLength-1]='\0'; // A ne pas oublier, c'est le dernier élément d'une chaîne de caractère.
N'oublie pas d'inclure string.h.
Mais en fait, là il ne s'agit pas d'allouer la mémoire avec new, car elle est déjà allouée statiquement lorsque tu as fait :
char vorname[cMaxStrLength]; cela a alloué dans la pile cMaxStrLength bytes. Donc pas besoin de l'opérateur new.
strncpy(destination, source, taille) est la version sécurisée de strcpy qui permet de copier la chaîne pointée par source dans celle pointée par destination en se limitant à taille octets.
D'ailleurs, lorsque tu utilises :
strncpy(vorname,vor,sizeof(vorname));
vorname[cMaxStrLength-1]='\0'; // A ne pas oublier, c'est le dernier élément d'une chaîne de caractère.
N'oublie pas d'inclure string.h.
gilles81
Messages postés
67
Date d'inscription
mardi 20 mai 2008
Statut
Membre
Dernière intervention
29 juillet 2009
1
5 nov. 2008 à 01:39
5 nov. 2008 à 01:39
comment peut on limiter le nombre de pointeur vers une classe: je dispose d'une classe cspieler, et une classe ckader,j'ai crée un pointeur vers cspieler et je veux limiter le nombre de pointer vers cspieler.comment vais je m'y prendre et est ce que cela aura t il une un fluence dans l'initialisation de mon pointeur?
merci
merci
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
5 nov. 2008 à 09:41
5 nov. 2008 à 09:41
limiter le nombre de pointeur ???
Je ne comprends pas ce que tu veux faire. Tu veux dire que tu veux limité le nombre d'objet cspieler ? Si c'est le cas, tu peux utiliser un membre statique que tu décrémentera à chaque appel du constructeur, et qui empechera la construction si il est nul.
Mais attention, vorname n'est pas un pointeur, mais un tableau, c'est à dire que tu ne peux pas modifier l'adresse :
vorname="chaine";
donnera une erreur.
pour initialiser tes entiers dans le constructeur, tu peux aussi utiliser la forme :
Je ne comprends pas ce que tu veux faire. Tu veux dire que tu veux limité le nombre d'objet cspieler ? Si c'est le cas, tu peux utiliser un membre statique que tu décrémentera à chaque appel du constructeur, et qui empechera la construction si il est nul.
Mais attention, vorname n'est pas un pointeur, mais un tableau, c'est à dire que tu ne peux pas modifier l'adresse :
vorname="chaine";
donnera une erreur.
pour initialiser tes entiers dans le constructeur, tu peux aussi utiliser la forme :
CSpieler(char* vor, char* nachname, char* geboren, unsigned int gro, unsigned int gewich) :groesse_cm(gro),gewitch_kg(gewitch) { strncpy(vor,vorname,cMaxStrLength); etc. }
4 nov. 2008 à 23:46
char*vorname n#est il pas un pointeur? si oui pourkoi n'utilise t-on pas l'expression new? et si j'avais un autre attribut char gilles[cMaxStrLength];qui ne correspondait a aucun argument, comment devrais je l'initialiaser dans mon constructeur? que fait exactement strncpy?
je suis nouveau en c++, j'ai jusqu'ici toujours programmé en java
merci