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
Bonjour,
comment devrais je initialiser les attributs suivant:

char vorname[cMaxStrLength];
char nachname[cMaxStrLength];
char geboren[cMaxStrLength];
unsigned int groesse_cm;
unsigned int gewicht_kg;
unsigned int aktNummer;
char aktVerein[cMaxStrLength];
unsigned int aktVereinSeit_jahr;
E_POSITION aktPosition;

dans un constructeur don la signature ressemble a ceci:

CSpieler(char* vorname, char* nachname,
char* geboren, unsigned int groesse, unsigned int gewicht);



merci

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
En utilisant strncpy pour les char* et l'affection pour les integer.
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
0
gilles81 Messages postés 67 Date d'inscription mardi 20 mai 2008 Statut Membre Dernière intervention 29 juillet 2009 1
4 nov. 2008 à 23:46
salut,
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
0
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
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.
0
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
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
0
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
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 :
CSpieler(char* vor, char* nachname, char* geboren, unsigned int gro, unsigned int gewich)
:groesse_cm(gro),gewitch_kg(gewitch)
{
  strncpy(vor,vorname,cMaxStrLength);
   etc.
}
0