Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2732 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Passage d'arguments par défaut dans constructeur

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Passage d'arguments par défaut dans constructeur

n°366294
KevinThePr​oud
Insubmersible
Posté le 18-04-2003 à 12:51:15  profilanswer
 

Salut,
J'ai un petit problème(pour note je travaille sur le même projet que DeltaDen):
J'ai une classe Gate et une classe dérivée NOT:public Gate
j'ai un constructeur dans Gate qui a 4 arguments. Pour éviter à avoir à taper 4 constructeurs, j'ai mis  
Gate::Gate(char name[],int delai=0, int nb=1, bool inv=false ) dans Gate.cpp
 
maintenant dans la classe NOT j'ai mis:
NOT::NOT(char name[],int delai=0,int nb=1,bool inv=false) : Gate (name,delai,nb,inv)
 
dans mon main ensuite je crée l'objet g:
Gate *g=new NOT("NONAME",0,1,false);
là ça compile et ça marche sans problème mais si je mets:
Gate *g=new NOT("NONAME" ); il ya erreur de compilation!
alors où me suis-je trompé?

mood
Publicité
Posté le 18-04-2003 à 12:51:15  profilanswer
 

n°366296
skeye
Posté le 18-04-2003 à 13:03:13  profilanswer
 

KevinTheProud a écrit :

Salut,
J'ai un petit problème(pour note je travaille sur le même projet que DeltaDen):
J'ai une classe Gate et une classe dérivée NOT:public Gate
j'ai un constructeur dans Gate qui a 4 arguments. Pour éviter à avoir à taper 4 constructeurs, j'ai mis  
Gate::Gate(char name[],int delai=0, int nb=1, bool inv=false ) dans Gate.cpp
 
maintenant dans la classe NOT j'ai mis:
NOT::NOT(char name[],int delai=0,int nb=1,bool inv=false) : Gate (name,delai,nb,inv)
 
dans mon main ensuite je crée l'objet g:
Gate *g=new NOT("NONAME",0,1,false);
là ça compile et ça marche sans problème mais si je mets:
Gate *g=new NOT("NONAME" ); il ya erreur de compilation!
alors où me suis-je trompé?


Je suis pas tout à fait sûr de ce que tu veux faire, mais si j'ai bien compris tu veux que les valeurs de delai, nb et inv soient fixes, pour pouvoir n'appeler le constructeur qu'avec un seul argument...?
Mais dans ce cas quel intérêt d'avoir ces valeurs en paramètre?
Un constructeur ne prenant que name suffirait, non?
En tout cas l'erreur de compilation me parait normale, puisque ton constructeur à 1 seul paramètre n'existe pas...
 
PS: la question de ton collègue de projet m'a fait faire quelques révisions déjà, on va bien voir si cette fois-ci j'ai tout compris...:D

n°366297
theshockwa​ve
I work at a firm named Koslow
Posté le 18-04-2003 à 13:04:00  profilanswer
 

Je n'ai jamais été fan des arguments par défaut ...
 
Si tu es sur que tu vas soit utiliser tous tes args soit n'en utiliser qu'un, autant faire uniquement 2 constructeurs bien distincts ...
 
et pourquoi pas faire : NOT::NOT(char name[]):NOT(name, 0, 1, false);
 
Edit ... Faute de frappes ... :whistle:


Message édité par theshockwave le 18-04-2003 à 13:04:39

---------------
last.fm
n°366298
theshockwa​ve
I work at a firm named Koslow
Posté le 18-04-2003 à 13:07:06  profilanswer
 

skeye a écrit :


Je suis pas tout à fait sûr de ce que tu veux faire, mais si j'ai bien compris tu veux que les valeurs de delai, nb et inv soient fixes, pour pouvoir n'appeler le constructeur qu'avec un seul argument...?
Mais dans ce cas quel intérêt d'avoir ces valeurs en paramètre?
Un constructeur ne prenant que name suffirait, non?
En tout cas l'erreur de compilation me parait normale, puisque ton constructeur à 1 seul paramètre n'existe pas...
 
PS: la question de ton collègue de projet m'a fait faire quelques révisions déjà, on va bien voir si cette fois-ci j'ai tout compris...:D
 


 
En l'occurrence, donner des valeurs par défaut a l'effet de créer les constructeurs avec moins de paramètres (en retirant tout ou partie des arguments auxquels on a affecté des valeurs par défaut)
 
donc si, le constructeur avec 1 seul arg devrait exister ...


---------------
last.fm
n°366301
skeye
Posté le 18-04-2003 à 13:08:44  profilanswer
 

theShOcKwAvE a écrit :


 
En l'occurrence, donner des valeurs par défaut a l'effet de créer les constructeurs avec moins de paramètres (en retirant tout ou partie des arguments auxquels on a affecté des valeurs par défaut)
 
donc si, le constructeur avec 1 seul arg devrait exister ...


bon, je retourne lire quelques cours moi...:lol:

n°366302
theshockwa​ve
I work at a firm named Koslow
Posté le 18-04-2003 à 13:08:49  profilanswer
 

En fait, si tu pouvais donner le message d'erreur que tu obtiens, ca pourrait peut-être nous aider ...


---------------
last.fm
n°366303
theshockwa​ve
I work at a firm named Koslow
Posté le 18-04-2003 à 13:09:55  profilanswer
 

skeye a écrit :


bon, je retourne lire quelques cours moi...:lol:


 
:lol:
 
je ferais bien de faire pareil ! ;) J'ai pas trop souvent mis en pratique cette fonctionnalité et je ne suis pas trop à l'aise avec ...


---------------
last.fm
n°366304
KevinThePr​oud
Insubmersible
Posté le 18-04-2003 à 13:10:38  profilanswer
 

skeye a écrit :


Je suis pas tout à fait sûr de ce que tu veux faire, mais si j'ai bien compris tu veux que les valeurs de delai, nb et inv soient fixes, pour pouvoir n'appeler le constructeur qu'avec un seul argument...?
Mais dans ce cas quel intérêt d'avoir ces valeurs en paramètre?
Un constructeur ne prenant que name suffirait, non?
En tout cas l'erreur de compilation me parait normale, puisque ton constructeur à 1 seul paramètre n'existe pas...
 
PS: la question de ton collègue de projet m'a fait faire quelques révisions déjà, on va bien voir si cette fois-ci j'ai tout compris...:D
 


Je veux avoir des arguments "optionnels", un objet NOT doit au minimum avoir un nom mais j'aimerai aussi pouvoir spécifier-si besoin est-le nombre d'entrées de l'objet(ici int nb). Or avec 4 arguments ça me fait 4 construteurs, je trouve ça assez lourd, j'avais imaginé que les arguments par défaut étaient la meilleure solution...

n°366307
KevinThePr​oud
Insubmersible
Posté le 18-04-2003 à 13:13:08  profilanswer
 

theShOcKwAvE a écrit :

En fait, si tu pouvais donner le message d'erreur que tu obtiens, ca pourrait peut-être nous aider ...


j'obtiens qu'il ne connait pas de constructeur avec seulement un argument:
no matching function for call to 'NOT::NOT(const char[7])'
candidates are : NOT::NOT(const NOT&)
NOT::NOT(char*,int,int,bool)

n°366308
theshockwa​ve
I work at a firm named Koslow
Posté le 18-04-2003 à 13:14:02  profilanswer
 

KevinTheProud a écrit :


Je veux avoir des arguments "optionnels", un objet NOT doit au minimum avoir un nom mais j'aimerai aussi pouvoir spécifier-si besoin est-le nombre d'entrées de l'objet(ici int nb). Or avec 4 arguments ça me fait 4 construteurs, je trouve ça assez lourd, j'avais imaginé que les arguments par défaut étaient la meilleure solution...


 
Effectivement, c'est vrai que cette solution me parait tout à fait adaptée pour ton cas ...
 
Mais ... Je me demande si les constructeurs générés de cette manière sont bien corrects ... Si ca se trouve, il n'arrive pas à faire le lien entre les valeurs par défaut et les variables que tu veux passer au constructeur de la classe mère ...
 
Avis de spécialiste demandé ... :D


---------------
last.fm
mood
Publicité
Posté le 18-04-2003 à 13:14:02  profilanswer
 

n°366311
theshockwa​ve
I work at a firm named Koslow
Posté le 18-04-2003 à 13:16:43  profilanswer
 

KevinTheProud a écrit :


j'obtiens qu'il ne connait pas de constructeur avec seulement un argument:
no matching function for call to 'NOT::NOT(const char[7])'
candidates are : NOT::NOT(const NOT&)
NOT::NOT(char*,int,int,bool)


:heink:
 
Ben ... Apparamment, il ne t'a pas généré les autres constructeurs ... C'est la seule chose que je vois ... MAis bon ... Définir tes 4 constructeurs à la main, c'est pas encore la mort ... D'autant plus que^c'est juste pour appeler le constructeur de la classe mère ... A la limite le corps du constructeur, tu le mets dans une fonction privée que tu appelles depuis chaque constructeur ...


---------------
last.fm
n°366315
skeye
Posté le 18-04-2003 à 13:18:43  profilanswer
 

theShOcKwAvE a écrit :


 
:lol:
 
je ferais bien de faire pareil ! ;) J'ai pas trop souvent mis en pratique cette fonctionnalité et je ne suis pas trop à l'aise avec ...


je vois rien chez christian casteyde...donc si tu as un meilleur lien hésite pas!

n°366320
skeye
Posté le 18-04-2003 à 13:22:49  profilanswer
 

KevinTheProud a écrit :


Je veux avoir des arguments "optionnels", un objet NOT doit au minimum avoir un nom mais j'aimerai aussi pouvoir spécifier-si besoin est-le nombre d'entrées de l'objet(ici int nb). Or avec 4 arguments ça me fait 4 construteurs, je trouve ça assez lourd, j'avais imaginé que les arguments par défaut étaient la meilleure solution...


Et pour le cas ou tu as aussi besoin de nb tu l'appelles comment?
Gate *g=new NOT("NONAME",nb);
me parait bancal, car aucune manière pour lui de savoir quelle argument représente nb...
p-e
Gate *g=new NOT("NONAME",,nb,);
auquel cas ca donnerait
Gate *g=new NOT("NONAME",,,);
:??:

n°366323
gloop
Posté le 18-04-2003 à 13:26:47  profilanswer
 

skeye a écrit :


Et pour le cas ou tu as aussi besoin de nb tu l'appelles comment?
Gate *g=new NOT("NONAME",nb);
me parait bancal, car aucune manière pour lui de savoir quelle argument représente nb...
p-e
Gate *g=new NOT("NONAME",,nb,);
auquel cas ca donnerait
Gate *g=new NOT("NONAME",,,);
:??:
 


non, quand tu veux spécifier un paramètre optionnel, tous les précédents doivent aussi être donnés
 
> KevinTheProud: avec un const char *, ce serait déjà mieux.

n°366329
polo021
Posté le 18-04-2003 à 13:35:21  profilanswer
 

j'ai peut etre pas tout compris mais pourquoi ne pas faire :
- soit un constructeur par defaut (donc vide) + un constructeur avec 1 param + 1 constructeur avec 4 params
- soit un constructeur par defaut + un constructeur avec des parametres qui ont des valeurs par defaut mon_constructeur(param1 = 0, param2 = "truc", param 3 = 2.3, param 4 = "mais bien sur" )
{
val1 = param1;
val2 = param2;
val3 = param3;
val4 = param4;  
}
il me semble, je n'en suis plus du tout sur, que si tu fait
new (4)
ton objet sera initialise avec val1 = 4, val 2 = "truc", val3 = 2.3 et val 4 = "mais bien sur"  
 
Est ce que ca irait pour resoudre ton probleme?
 
 
EDIT : en relisant le debut du topic je viens de m'apercevoir que je ma reponse a un peu rien a voir
EDIT 2 : enfin si mais bon je n'ai fait que de repeter ce que les autres ont dit :ange:


Message édité par polo021 le 18-04-2003 à 13:47:15
n°366334
KevinThePr​oud
Insubmersible
Posté le 18-04-2003 à 13:39:28  profilanswer
 

gloop a écrit :


non, quand tu veux spécifier un paramètre optionnel, tous les précédents doivent aussi être donnés
 
> KevinTheProud: avec un const char *, ce serait déjà mieux.
 


ça change rien :/

n°366348
theshockwa​ve
I work at a firm named Koslow
Posté le 18-04-2003 à 13:54:40  profilanswer
 

KevinTheProud a écrit :


ça change rien :/


 
tu peux même mettre des const partout dans ton entête de constructeur ... Ca ne changera rien au schmilblick ... Simplement, ce sera plus explicite quant à tes intentions ...
 
Mais en règle générale, on ne modifie pas les valeurs passées dans un constructeur ...


---------------
last.fm
n°366378
theshockwa​ve
I work at a firm named Koslow
Posté le 18-04-2003 à 14:09:35  profilanswer
 

Code :
  1. class Stash {
  2.   Stash(int size, int initQuantity = 0);
  3. }
  4. //...
  5. Stash A(100), B(100, 0);


will produce exactly the same results. The identical constructor is called in both cases, but for A, the second argument is automatically substituted by the compiler when it sees the first argument is an int and that there is no second argument. The compiler has seen the default argument, so it knows it can still make the function call if it substitutes this second argument, which is what you?ve told it to do by making it a default.
 
Bruce Eckel, Thinking in C++ 2nd Edition Volume 1 ...
 
 
Ben ... D'après lui, ca devrait marcher ... (puisque ce serait même le même constructeur qui serait appelé ...)
Je ne sais pas si ce bouquin est une bonne référence, mais bon ... C'est le seul que j'aie sous la main à l'instant ...
:D


Message édité par theshockwave le 18-04-2003 à 14:13:44

---------------
last.fm
n°366385
KevinThePr​oud
Insubmersible
Posté le 18-04-2003 à 14:14:25  profilanswer
 

theShOcKwAvE a écrit :


Code :
  1. Stash(int size, int initQuantity = 0);
  2. //...
  3. Stash A(100), B(100, 0);


will produce exactly the same results. The identical constructor is called in both cases, but for A, the second argument is automatically substituted by the compiler when it sees the first argument is an int and that there is no second argument. The compiler has seen the default argument, so it knows it can still make the function call if it substitutes this second argument, which is what you?ve told it to do by making it a default.
 
 
Bruce Eckel, Thinking in C++ 2nd Edition Volume 1 ...
 
 
Ben ... D'après lui, ca devrait marcher ... (puisque ce serait même le même constructeur qui serait appelé ...)
Je ne sais pas si ce bouquin est une bonne référence, mais bon ... C'est le seul que j'aie sous la main à l'instant ...
:D
 


Bah en fait moi aussi j'en ai un sous la main,Claude Delannay, 5ème édition, ils mettent en plus un exmple qui marche chez moi :/

n°366393
skeye
Posté le 18-04-2003 à 14:17:17  profilanswer
 

Le problème viendrait de l'héritage?
 
PS: je lance des idées, mais si vous voulez que j'arrete dites-le...en tout cas moi j'aime bien votre projet, ca m'apprend des choses...:D

n°366403
theshockwa​ve
I work at a firm named Koslow
Posté le 18-04-2003 à 14:26:56  profilanswer
 

C'est ce que je supposais depuis le début ...
 
Je n'arrive pas à trouver d'exemple qui mette en avant les paramètres par défaut d'un constructeur ainsi que l'utilisation d'un constructeur hérité ...


---------------
last.fm
n°366411
KevinThePr​oud
Insubmersible
Posté le 18-04-2003 à 14:29:59  profilanswer
 

Voici l'exemple de mon bouquin:
#include <iostream>
#include <stdlib.h>
 
using namespace std;
//Classe point
class point
{
int x,y;
public:
point(int abs=0,int ord=0) //constructeur de point
{cout<<"++ constr. point :  "<<abs<<" "<<ord<<"\n";
x=abs; y =ord;
}
~point()
{cout<<"-- destr. point :   "<<x<<" "<<y<<"\n";
}
};
class pointcol : public point
{
short couleur;
public:
pointcol(int,int,short);
~pointcol()
{cout<<"-- dest. pointcol - couleur: "<<couleur<<"\n";
}
};
pointcol::pointcol(int abs=0,int ord=0,short cl=1): point (abs,ord)
{cout<<"++constr. pointcol : "<<abs<<" "<<ord<<" "<<cl<<"\n";
couleur=cl;
}
int main()
{pointcol a (10,15,3);
pointcol b (2,3);
pointcol c (12);
pointcol * adr;
adr= new pointcol (12,25);
delete adr;
 
  system("PAUSE" );  
  return 0;
}

n°366419
theshockwa​ve
I work at a firm named Koslow
Posté le 18-04-2003 à 14:33:07  profilanswer
 

KevinTheProud a écrit :

Voici l'exemple de mon bouquin:

Code :
  1. #include <iostream>
  2. #include <stdlib.h>
  3. using namespace std;
  4. //Classe point
  5. class point
  6. {
  7.   int x,y;
  8.   public:
  9.   point(int abs=0,int ord=0) //constructeur de point
  10.   {
  11.     cout<<"++ constr. point :  "<<abs<<" "<<ord<<"\n";
  12.     x=abs; y =ord;
  13.   }
  14.   ~point()
  15.   {
  16.     cout<<"-- destr. point :   "<<x<<" "<<y<<"\n";
  17.   }
  18. };
  19. class pointcol : public point
  20. {
  21.   short couleur;
  22.   public:
  23.   pointcol(int,int,short);
  24.   ~pointcol()
  25.   {
  26.     cout<<"-- dest. pointcol - couleur: "<<couleur<<"\n";
  27.   }
  28. };
  29. pointcol::pointcol(int abs=0,int ord=0,short cl=1): point (abs,ord)
  30. {
  31.   cout<<"++constr. pointcol : "<<abs<<" "<<ord<<" "<<cl<<"\n";
  32.   couleur=cl;
  33. }
  34. int main()
  35. {
  36.   pointcol a (10,15,3);
  37.   pointcol b (2,3);
  38.   pointcol c (12);
  39.   pointcol * adr;
  40.   adr= new pointcol (12,25);
  41.   delete adr;
  42.   system("PAUSE" );
  43.   return 0;
  44. }




 
Je me permet de faire une petite mise en forme .... :D


Message édité par theshockwave le 18-04-2003 à 14:34:17

---------------
last.fm
n°366431
KevinThePr​oud
Insubmersible
Posté le 18-04-2003 à 14:39:39  profilanswer
 

theShOcKwAvE a écrit :


 
Je me permet de faire une petite mise en forme .... :D


j'ai mis le code plus par intérêt de copier/coller :D

n°366437
theshockwa​ve
I work at a firm named Koslow
Posté le 18-04-2003 à 14:43:06  profilanswer
 

KevinTheProud a écrit :


j'ai mis le code plus par intérêt de copier/coller :D


 
Oui, mais perso, je préfère lire le code que de l'essayer sans chercher à voir ce que ca fait avant ... D'où la mise en forme ... (en plus, ca permet à ceux qui n'ont pas un compilo directement sous la main de se faire une idée plus facilement ...)
 
 
Bon ... Toujours est-il que je ne vois pas pourquoi cet exemple passe et pas ton projet ... En soi, c'est exactement le comportement que tu veux avoir ...


---------------
last.fm
n°366446
theshockwa​ve
I work at a firm named Koslow
Posté le 18-04-2003 à 14:45:20  profilanswer
 

Tes 2 classes de portes logiques ne doivent sans doute pas être monstrueuses ... Tu pourrais poster la déclaration dans son intégralité ? :D


---------------
last.fm
n°366451
KevinThePr​oud
Insubmersible
Posté le 18-04-2003 à 14:48:02  profilanswer
 

theShOcKwAvE a écrit :


 
Oui, mais perso, je préfère lire le code que de l'essayer sans chercher à voir ce que ca fait avant ... D'où la mise en forme ... (en plus, ca permet à ceux qui n'ont pas un compilo directement sous la main de se faire une idée plus facilement ...)
 
 
Bon ... Toujours est-il que je ne vois pas pourquoi cet exemple passe et pas ton projet ... En soi, c'est exactement le comportement que tu veux avoir ...


ça fait une journée que je suis dessus :sweat:

n°366463
KevinThePr​oud
Insubmersible
Posté le 18-04-2003 à 14:51:53  profilanswer
 

theShOcKwAvE a écrit :

Tes 2 classes de portes logiques ne doivent sans doute pas être monstrueuses ... Tu pourrais poster la déclaration dans son intégralité ? :D


bon ok,attention les yeux(monstrueuse?): Gate.h

Code :
  1. /*------------Définition de la classe Gate--------------------------*/
  2. #ifndef Gate_h
  3. #define Gate_h
  4. #include <string>
  5. using namespace std;
  6. class Gate
  7. {
  8. //Déclaration des membres privés
  9. int * input_values;//Tableau d'entiers contenant les entrées
  10. char * Name;//String contenant le nom de la porte
  11. bool * OpenEntries;//Tableau répertoriant les entrées libres
  12. //Tampon
  13. int point;//Itérateur du Buffer
  14. int delay;//Délai interne de la porte(en cycles)
  15. int *Buffer;//Tableau d'entier contenant le tampon, initialisé à 0 de taille delay+1
  16. Gate * GateInTab;//Tableau contenant des pointeurs vers les portes d'entrées
  17. //Fonctionnalités "répertoire des sorties"
  18. bool hasOutput();//renvoie true si une sortie est une sortie circuit
  19. protected:
  20. /*
  21. Gate();
  22. Gate(char *);
  23. Gate(char *,int);
  24. Gate(char *,int,bool);
  25. const char * noname;*/
  26. Gate(char*,int,int,bool);//constructeur permettant de définir le délai à l'instanciation
  27. int entriesNumber;//Nombre d'entrées
  28. int *truth_table;//Table de vérité-tableau de booléens
  29. //Fonctionnalités diverses
  30. void Inverse();
  31. //Déclaration des membres protégés
  32. void EntryInit();//Initialisation des tableaux d'entrée
  33. int CalculateValue();//Renvoie la réponse de la porte en fonction de la table de vérité
  34. /*ATTENTION: CalculateValue se base sur un formatage précis de la table de vérité!*/
  35. //Déclaration des membres publics
  36. public:
  37. //Fonctions
  38. //Niveau circuit
  39. void connectOut(Gate *,int);//Connecte la sortie de la porte à l'entrée spécifiée
  40. void disconnectOut(Gate *,int);//Déconnecte la sortie de la porte de l'entrée spécifiée
  41. void connectIn(int,Gate *);//Connecte l'entrée de la porte à la sortie spécifiée
  42. void disconnectIn(int);//déconnecte l'entréé de la porte de la sortie attachée
  43. //Niveau Simulation
  44. void setValue(int,int);//attribue la valeur(1er argument) à l'entrée(2eme argument)
  45. int getValue();//Renvoie la valeur courante de la sortie
  46. void reset();//Réinitialise les valeurs contenues relatives à la simulation
  47.             //cad:intput_values est initialisé à un tableau de zéros
  48. //Sauvegarde
  49. int * getTruthTable();//Renvoie un pointeur vers la table de vérité
  50. void setDelay(int);//permet de définir le délai
  51. int getDelay();//Renvoie le délai interne de la porte
  52. char * getName();//Renvoie le nom de la porte
  53. int getNbEntries();
  54. string ConnectoString();//Renvoie un string des connexions sorties
  55. /*
  56. *****************************************************
  57.   Implémentation de la liste contenant les sorties
  58. *****************************************************
  59. */
  60. private:
  61. //************Définition de structure noeud de liste
  62. struct node
  63. {node * next;   //pointeur sur l'élément suivant
  64. Gate * gate; //pointeur vers une porte de porte  
  65. int EntryNumber;//Numero de la porte
  66. };
  67. node* current;//pointeur sur la sortie courante
  68. node * start;//pointeur sur le début de la liste
  69. void Begin();//initialise le pointeur current sur le début de la liste
  70. bool End();//renvoie true si current se trouve en fin de liste
  71. void Next();//déplace current sur le noeud suivant dans la liste
  72. void transmitBit(int);
  73. void toString();   //Renvoie un string représentatif de la liste
  74. };
  75. #endif


maintenant Gates.h:

Code :
  1. #ifndef Gates_h
  2. #define Gates_h
  3. #include "Gate.h"
  4. using namespace std;
  5. class NOT:public Gate
  6. {
  7. public:
  8. NOT();
  9. NOT(char *);
  10. NOT(char *,int);
  11. NOT(char *,int,int);
  12. NOT(char*,int,int,bool);
  13. };
  14. //class AND:public Gate{};
  15. //class OR:public Gate{};
  16. //class XOR:public Gate{};
  17. #endif

n°366507
theshockwa​ve
I work at a firm named Koslow
Posté le 18-04-2003 à 15:12:03  profilanswer
 

KevinTheProud a écrit :


Code :
  1. /*------------Définition de la classe Gate--------------------------*/
  2. #ifndef Gate_h
  3. #define Gate_h
  4. #include <string>
  5. using namespace std;
  6. class Gate
  7. {
  8. int * input_values;//les entrées
  9. char * Name;//nom de la porte
  10. bool * OpenEntries;//entrées libres
  11. //Tampon
  12. int point;//Itérateur du Buffer
  13. int delay;//Délai interne
  14. int *Buffer;//le tampon
  15. Gate * GateInTab;//Tableau de portes d'entrées
  16. //Fonctionnalités "répertoire des sorties"
  17. bool hasOutput();//a une sortie circuit ?
  18. protected:
  19. Gate(char*,int,int,bool);//définir le délai à l'instanciation
  20. int entriesNumber;//Nombre d'entrées
  21. int *truth_table;//Table de vérité-tableau de booléens
  22. //Fonctionnalités diverses
  23. void Inverse();
  24. //Déclaration des membres protégés
  25. void EntryInit();//Initialisation des tableaux d'entrée
  26. int CalculateValue();//Renvoie la réponse de la porte en fonction de la table de vérité
  27. //Déclaration des membres publics
  28. public:
  29. //Fonctions
  30. //Niveau circuit
  31. void connectOut(Gate *,int);
  32. void disconnectOut(Gate *,int);
  33. void connectIn(int,Gate *);
  34. void disconnectIn(int);
  35. //Niveau Simulation
  36. void setValue(int,int);
  37. int getValue();
  38. void reset();
  39. //Sauvegarde
  40. int * getTruthTable();
  41. void setDelay(int);
  42. int getDelay();
  43. char * getName();
  44. int getNbEntries();
  45. string ConnectoString();
  46. /*
  47. *****************************************************
  48.   Implémentation de la liste contenant les sorties
  49. *****************************************************
  50. */
  51. private:
  52. // ************Définition de structure noeud de liste
  53. struct node
  54. {node * next;   //pointeur sur l'élément suivant
  55. Gate * gate; //pointeur vers une porte de porte  
  56. int EntryNumber;//Numero de la porte
  57. };
  58. node* current;
  59. node * start;
  60. void Begin();
  61. bool End();
  62. void Next();
  63. void transmitBit(int);
  64. void toString();
  65. };
  66. #endif


 
maintenant Gates.h:
 

Code :
  1. #ifndef Gates_h
  2. #define Gates_h
  3. #include "Gate.h"
  4. using namespace std;
  5. class NOT:public Gate
  6. {
  7. public:
  8. NOT();
  9. NOT(char *);
  10. NOT(char *,int);
  11. NOT(char *,int,int);
  12. NOT(char*,int,int,bool);
  13. };
  14. #endif




 
C'est déjà un peu mieux ... Si tu veux être explicite et éviter d'avoir à écrire 3 tonnes de commentaires qui alourdissent la lecture du code, tu devrais directement nommer tes variables dans les déclarations de tes méthodes ... Enfin ... Ce n'est que mon humble avis ....


Message édité par theshockwave le 18-04-2003 à 15:19:53

---------------
last.fm
n°366579
theshockwa​ve
I work at a firm named Koslow
Posté le 18-04-2003 à 15:51:16  profilanswer
 

:heink: ... J'arrive pas à trouver le destructeur ... Ne me dis pas que tu as "oublié" le destructeur ...
 
 
Enfin ... Ca ne devrait pas te causer ce genre de pb pour autant ...


---------------
last.fm
n°366584
KevinThePr​oud
Insubmersible
Posté le 18-04-2003 à 15:56:16  profilanswer
 

theShOcKwAvE a écrit :

:heink: ... J'arrive pas à trouver le destructeur ... Ne me dis pas que tu as "oublié" le destructeur ...
 
 
Enfin ... Ca ne devrait pas te causer ce genre de pb pour autant ...
 


Euh... disons que je l'ai "consciemment oublié" :D, je compte l'implémenter "plus tard"
EDIT: c'est aussi mon premier prog C++, donc le destructeur je n'ai pas encore très bien capté l'utilité...


Message édité par KevinTheProud le 18-04-2003 à 15:59:52
n°366749
gloop
Posté le 18-04-2003 à 18:22:52  profilanswer
 

KevinTheProud a écrit :


bon ok,attention les yeux(monstrueuse?): Gate.h
[cpp]
/*------------Définition de la classe Gate--------------------------*/
 
int * input_values;//Tableau d'entiers contenant les entrées
char * Name;//String contenant le nom de la porte
bool * OpenEntries;//Tableau répertoriant les entrées libres


 
avec des vector, string, bitset ou vector<bool>, ce sera mieux et plus simple.

n°366787
skeye
Posté le 18-04-2003 à 19:57:35  profilanswer
 

KevinTheProud a écrit :


Euh... disons que je l'ai "consciemment oublié" :D, je compte l'implémenter "plus tard"
EDIT: c'est aussi mon premier prog C++, donc le destructeur je n'ai pas encore très bien capté l'utilité...


au hasard, libérer la mémoire? :ange:

n°368106
theshockwa​ve
I work at a firm named Koslow
Posté le 22-04-2003 à 00:34:06  profilanswer
 

Petite question simple : Tu as essayé de spécifier les valeurs par défaut dans le .cpp ET dans le .h ?
 
 
Edit : typo


Message édité par theshockwave le 22-04-2003 à 00:34:30

---------------
last.fm
n°369345
KevinThePr​oud
Insubmersible
Posté le 23-04-2003 à 12:28:37  profilanswer
 

theShOcKwAvE a écrit :

Petite question simple : Tu as essayé de spécifier les valeurs par défaut dans le .cpp ET dans le .h ?
 
 
Edit : typo


merci pour ta réponse, j'ai essayé de les mettre dans les 2 ça marchait pas, mais en fait il faut juste les mettre dans le .h et par exemple écrire GATE(char*name="NONAME"... et donc dans le .cpp j'ai juste GATE(char*name,...
:)

n°369364
theshockwa​ve
I work at a firm named Koslow
Posté le 23-04-2003 à 13:13:20  profilanswer
 

ok ... Donc ca y est, ca marche ?


---------------
last.fm
n°369394
KevinThePr​oud
Insubmersible
Posté le 23-04-2003 à 13:57:29  profilanswer
 

theShOcKwAvE a écrit :

ok ... Donc ca y est, ca marche ?


vi ça marche j'avaic pas pensé à mettre ça direct dans le .h parce je trouve bizarre de déclarer la variable dans l'interface,
mais bon si ça marche... :D

n°369424
theshockwa​ve
I work at a firm named Koslow
Posté le 23-04-2003 à 14:25:20  profilanswer
 

Dans un sens, ca devient un peu plus logique ... Tu déclares plusieurs constructeurs qui sont en fait des redirections vers le seul que tu auras implémenté ... Donc logiquement, si ce ne sont que des déclarations alternatives pour ledit constructeur, il est plus logique de laisser lesdites déclarations dans le header ...


---------------
last.fm
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Passage d'arguments par défaut dans constructeur

 

Sujets relatifs
[VB] selection d un champ par defaut dans un combomysql: komment kon fait pour retourner une valeur par defaut?
VBS regwrite et passage d'une variblequestion sur le passage d'un pointeur en paramètre
[Session] Passage de l'id de session de pages en pages[Access] Insertion d'une valeur par défaut
Des arguments pour expliquer que les normes, c'est bien ?Passage erroné d'un tableau de chaînes de caractères à une procédure..
Probleme de passage de variable en parametre (type=file)[mysql] Laisser une valeur null par défaut ou non?
Plus de sujets relatifs à : Passage d'arguments par défaut dans constructeur


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR