Passage d'arguments par défaut dans constructeur

Passage d'arguments par défaut dans constructeur - C++ - Programmation

Marsh Posté le 18-04-2003 à 12:51:15    

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é?

Reply

Marsh Posté le 18-04-2003 à 12:51:15   

Reply

Marsh Posté le 18-04-2003 à 13:03:13    

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

Reply

Marsh Posté le 18-04-2003 à 13:04:00    

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
Reply

Marsh Posté le 18-04-2003 à 13:07:06    

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
Reply

Marsh Posté le 18-04-2003 à 13:08:44    

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:

Reply

Marsh Posté le 18-04-2003 à 13:08:49    

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


---------------
last.fm
Reply

Marsh Posté le 18-04-2003 à 13:09:55    

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
Reply

Marsh Posté le 18-04-2003 à 13:10:38    

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...

Reply

Marsh Posté le 18-04-2003 à 13:13:08    

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)

Reply

Marsh Posté le 18-04-2003 à 13:14:02    

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
Reply

Marsh Posté le 18-04-2003 à 13:14:02   

Reply

Marsh Posté le 18-04-2003 à 13:16:43    

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
Reply

Marsh Posté le 18-04-2003 à 13:18:43    

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!

Reply

Marsh Posté le 18-04-2003 à 13:22:49    

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",,,);
:??:

Reply

Marsh Posté le 18-04-2003 à 13:26:47    

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.

Reply

Marsh Posté le 18-04-2003 à 13:35:21    

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
Reply

Marsh Posté le 18-04-2003 à 13:39:28    

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 :/

Reply

Marsh Posté le 18-04-2003 à 13:54:40    

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
Reply

Marsh Posté le 18-04-2003 à 14:09:35    

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
Reply

Marsh Posté le 18-04-2003 à 14:14:25    

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 :/

Reply

Marsh Posté le 18-04-2003 à 14:17:17    

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

Reply

Marsh Posté le 18-04-2003 à 14:26:56    

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
Reply

Marsh Posté le 18-04-2003 à 14:29:59    

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;
}

Reply

Marsh Posté le 18-04-2003 à 14:33:07    

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
Reply

Marsh Posté le 18-04-2003 à 14:39:39    

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

Reply

Marsh Posté le 18-04-2003 à 14:43:06    

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
Reply

Marsh Posté le 18-04-2003 à 14:45:20    

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
Reply

Marsh Posté le 18-04-2003 à 14:48:02    

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:

Reply

Marsh Posté le 18-04-2003 à 14:51:53    

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

Reply

Marsh Posté le 18-04-2003 à 15:12:03    

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
Reply

Marsh Posté le 18-04-2003 à 15:51:16    

: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
Reply

Marsh Posté le 18-04-2003 à 15:56:16    

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
Reply

Marsh Posté le 18-04-2003 à 18:22:52    

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.

Reply

Marsh Posté le 18-04-2003 à 19:57:35    

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:

Reply

Marsh Posté le 22-04-2003 à 00:34:06    

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
Reply

Marsh Posté le 23-04-2003 à 12:28:37    

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,...
:)

Reply

Marsh Posté le 23-04-2003 à 13:13:20    

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


---------------
last.fm
Reply

Marsh Posté le 23-04-2003 à 13:57:29    

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

Reply

Marsh Posté le 23-04-2003 à 14:25:20    

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
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed