Constructeur prenant un nombre de paramètres variable ? [C++ débutant] - C++ - Programmation
Marsh Posté le 17-02-2006 à 20:33:56
tu recuperes les parametres avec un std::va_list (<cstdarg> ) et les macros va_start, va_arg et va_end mais c'est assez dangereux à utiliser dans la mesure ou on peut refiler n'importe quoi (en terme de type et de nombre d'argument) à ce genre de fonction, aucun controles ne peut etre fais à la compilation
le mieux c'est de faire des push_back
Marsh Posté le 17-02-2006 à 21:27:53
Push back ?
Sinon, tant pis, je ferai une fonction intermédiaire ... m'enfin bon
Merci de vos réponses
Marsh Posté le 17-02-2006 à 21:34:08
ReplyMarsh Posté le 18-02-2006 à 08:08:01
skelter a écrit : ton type liste fourni bien des méthodes pour l'insertion d'objet ? |
Jep, mais pour le reste, je n'ai le droit d'utiliser que Iostream.h (restriction de l'énoncé) (bon, et va_arg a la limite)
Marsh Posté le 18-02-2006 à 08:59:55
ParadoX a écrit : Jep, mais pour le reste, je n'ai le droit d'utiliser que Iostream.h |
putain mais NON :
#include <iostream>
pas iostream.h
...
pr tn probleme, utilise un std::vector
Marsh Posté le 19-02-2006 à 17:36:40
Joel F a écrit : putain mais NON : |
C'est pas la peine de s'énerver, hein
Je ne connais pas std::vector ! Je n'ai droit qu'a iostream.h ...
Je vais tenter le constructeur en va_arg ..
Marsh Posté le 19-02-2006 à 17:41:11
non. apprend std::vector. va_arg c'est pas dans iostream.h non plus. va_arg c'est de la chiasse pas sur au niveau des types ni au niveau de rien. viens pas nous cassez les bonbons si ça marche pas, on a qu'une seule réponse : std::vector
Marsh Posté le 19-02-2006 à 17:45:56
Je répète que je n'ai pas le droit, d'après le sujet ^^
Marsh Posté le 19-02-2006 à 18:04:09
Si le prof a dis qu'il veut pas, il veut pas (ni pour les push_back, ni pour la classe string, ni pour la stl tout court), y'avais un constructeur a paramètre variable samedi matin
Par exemple, avec juste un constructeur a paramètres variable, le premier c'est la taille du tableau, v la première valeur, ... :
Code :
|
Y'a pas de test toussa, pataper ..
Marsh Posté le 19-02-2006 à 18:13:08
Flaie a écrit : Si le prof a dis qu'il veut pas, il veut pas (ni pour les push_back, ni pour la classe string, ni pour la stl tout court), y'avais un constructeur a paramètre variable samedi matin
|
Merci ^^
Jep, j'ai posté ce sujet la veille du partiel, et hop au partiel un constructeur à parametres variables Au moins, j'avais ma réponse. Ceci dit, je n'ai pas répondu juste à ce truc
Merci en tout cas, on va essayer de rattrapper tout ça avec le projet
J'esaye, je reviendrai poster quand ça plantera
PS: T'es en l3 ? iup ?
Marsh Posté le 19-02-2006 à 18:22:35
Ahah pas de bol pour le partiel , pour le projet ça serait marrant qu'il compte comme contrôle continu .
Ah ouais et faut inclure stdargs.h pour va_arg, et compagnie .
PS : en L3 sécurité sytème et je sais plus quoi
Marsh Posté le 19-02-2006 à 18:26:27
si t'as pas le droit à vector, t'as encore moins le droit à va_arg
Marsh Posté le 19-02-2006 à 18:31:06
Étrangement c'est autorisé justement il en veut un pour une certaine classe .
C'est compliqué quoi .
Marsh Posté le 19-02-2006 à 19:03:28
Pour les curieux:
http://orgasm.free.fr/hfr/sujetc++.jpg
Flaie: ça avance, vous ?
Marsh Posté le 19-02-2006 à 19:03:36
Comment apprendre aux étudiants à ajouter des trous de sécurité dans leurs interfaces.
En plus en Visual C++ 6...
Ca devrait être interdit, les profs comme ça.
Marsh Posté le 19-02-2006 à 19:05:18
el muchacho a écrit : Comment apprendre aux étudiants à ajouter des trous de sécurité dans leurs interfaces. Ca devrait être interdit, les profs comme ça. |
On n'est pas obligés d'utiliser un constructeur pareil, sauf que je pense que c'est la meilleure solution. Et d'un autre coté, je suis débutant, hein ... alors l'aspect pédagogique prime je pense. Comme dirait notre prof: "C'est moche et ça sert à rien ... mais c'est pédagogique"
Marsh Posté le 19-02-2006 à 19:09:42
ParadoX a écrit : On n'est pas obligés d'utiliser un constructeur pareil, sauf que je pense que c'est la meilleure solution. Et d'un autre coté, je suis débutant, hein ... alors l'aspect pédagogique prime je pense. Comme dirait notre prof: "C'est moche et ça sert à rien ... mais c'est pédagogique" |
Justement non. Ca n'est pas pédagogique. Quand on apprend le piano, on commence par les gammes. Je vois que rien n'interdit d'utiliser la STL, alors apprends la STL, c'est un passage obligé. Taz t'a dit std::vector<>, ça n'est pas pour rien. Et de plus, même si ça parait compliqué au début, tu vas assez vite t'apercevoir que c'est très pratique. Tellement pratique, même, que tout le monde l'utilise. Malheureusement, vous devez utiliser VC++ 6, qui n'est pas standard, mais ça, vous n'y pouvez rien.
Marsh Posté le 19-02-2006 à 19:10:48
nan mais bon, ok, mais fo aussi savoir faire par soit meme des vecteurs. Je vois quand meme un peu l'idée derriere tout ca ...a
Marsh Posté le 19-02-2006 à 19:14:13
el muchacho a écrit : Justement non. Ca n'est pas pédagogique. Quand on apprend le piano, on commence par les gammes. Je vois que rien n'interdit d'utiliser la STL, alors apprends la STL, c'est un passage obligé. Taz t'a dit std::vector<>, ça n'est pas pour rien. Et de plus, même si ça parait compliqué au début, tu vas assez vite t'apercevoir que c'est très pratique. Tellement pratique, même, que tout le monde l'utilise. Malheureusement, vous devez utiliser VC++ 6, qui n'est pas standard, mais ça, vous n'y pouvez rien. |
L'interdiction d'utiliser autre chose que iostream et varg a été donnée oralement par la suite, par le prof
Enfin merci, jvais quand même aller regarder ce que c'est ...
Marsh Posté le 19-02-2006 à 19:14:26
Créer des containers est un exercice à part, je ne vois pas bien l'intérêt de le surajouter au pb posé qui est un outil de dessin vectoriel. Ca devrait au moins être sugééré dans le sujet si le prof veut cela.
Marsh Posté le 19-02-2006 à 19:18:23
ParadoX a écrit : Pour les curieux: |
Ouais VC++ 6 c'est clair qu'il date, au deuxième semestre c'est VC++ 7 et Borland C++ Builder 4 , on pourrais au moins prendre des versions à jour tant qu'a faire ... mais bon ça me dérange pas plus que ça, dans l'ensemble ça compile bien, y'a des trucs qui passent avec g++ mais pas avec VC++ genre cout.rdbuf() qui merde par exemple, ça dois d'ailleurs sûrement se régler, j'ai pas trop cherché..
Pour le projet ouais il est fini, y'a plus qu'a taper le rapport .
Le prof est sympa, ses cours également, et il réponds volontier a nos questions, le reste c'est du bonus .
Marsh Posté le 19-02-2006 à 19:58:39
C'est de quel niveau ? Licence ? En tous cas, j'ai réalisé quelque chose de similaire avec Visual C++ 6.0 pour un autre besoin (professionnel) mais l'interface était la souris pas la ligne de commande et on pouvait effectuer une rotation des objets.
Marsh Posté le 19-02-2006 à 20:43:56
ReplyMarsh Posté le 22-02-2006 à 20:13:28
Désolé de faire le lourd, mais ... ça ne marche pas
.h
Code :
|
.cpp
Code :
|
ça compile, et le groupe est crée avec le bon nom ... sauf que la liste contenue n'a pas le bon contenu (et ce n'est pas la méthode d'insertion qui foire !)
Qqun a une idée ?
Marsh Posté le 23-02-2006 à 01:12:39
Bah pour qu'il ajoute les n-1 restants ...
Le nb d'elements est bon, mais pas le contenu !
C'est le va_arg qui pose pb, avec un constructeur avec 3 formes, ça marche nickel:
Code :
|
Marsh Posté le 23-02-2006 à 13:23:10
Juste pour savoir... c'est pour gérer quoi le contructeur a variable multiple ? ( par rapport à l'ennoncé du projet )
Marsh Posté le 23-02-2006 à 16:56:23
Créer un groupe à partir de figures ... mais on ne sait pas combien !
Marsh Posté le 23-02-2006 à 17:30:24
faut que l'interface de Groupe permette d'effectuer cette opération
monGroupe.ajoutFin(monObjet);
c'est beaucoup trop dangereux avec va_arg et moins flexible à l'utilisation (faut preciser le nombre d'objet passés en parametre)
Marsh Posté le 23-02-2006 à 18:01:13
L'interface ?
Mais la méthode fonctionne avec un constructeur "normal", avec disons 3 objets ... pourquoi pâs avec Varg ?
Marsh Posté le 23-02-2006 à 18:41:54
Le compilateur va sûrement se plaindre si tu passe un objet à fonction(...). Essaye avec prinf() pour voir.
Il faudrait donc utiliser des pointeurs vers new objets, genre:
fonction(new Objet(),new Objet(),new Objet(),NULL);
De toutes manières, il n y a pas de vérification de typage, ce qui rends les arguments variables peu recommandables.
En général, avec C++ on redéfinit un opérateur spécial pour celà. Exemple:
Code :
|
Tu peux coder la même chose avec:
Groupe& Groupe::operator , (const Objet& o);
si tu as une sous-classe de Groupe pour stocker des objets.
Ensuite:
Groupe g=Objet(),Objet(),Objet();
Marsh Posté le 23-02-2006 à 18:45:05
Citation : L'interface ? |
les méthodes publique, les opérations fournies à l'utilisateur de la classe
Code :
|
Citation : Mais la méthode fonctionne avec un constructeur "normal", avec disons 3 objets ... pourquoi pâs avec Varg ? |
parce que c'est dégueulasse et tu peux facilement corrompre la pile
Marsh Posté le 23-02-2006 à 20:48:54
ReplyMarsh Posté le 24-02-2006 à 07:42:55
Taz a écrit : si je résume, on a de la branlette parce que ça veut pas faire un new[] |
?
Je ne vois pas trop le rapport, je pense surtout qu'il y a un probleme avec la méthode varg, car sans ça, mon truc marche ... va falloir que je trouve autre chose
Marsh Posté le 24-02-2006 à 09:15:44
Citation : |
ouais... t'es pas obliger de contruire l'objet en 1 seule instruction !
tu crée un objet Groupe(), et apres du fais des ajouteForme(..la forme..) dessus, comme le dis skelter.
Je suppose que tu as un tableau qui contient le nom des formes a ajouter quand tu parses la ligne de commande.
C'est de la bidouille les parametres variables...
Marsh Posté le 24-02-2006 à 12:24:02
Je vais essayer, ouais .. C'est ce que j'ai pensé faire
Merci !
Marsh Posté le 17-02-2006 à 19:27:34
Bonjour,
Est-ce possible de faire un constructeur avec un nombre variable de paramètres ? (comme une fonction style int fonction(param, ...))
Je dois pouvoir créer une liste d'objets soit à partir d'une autre liste d'objets (facile), ou bien à partir de plusieurs objets ... mais je ne sais pas combien ! Sinon, comment procéder ?
---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt