Besoin d'aide sur l'initialisation d'une variable dans un constructeur

Besoin d'aide sur l'initialisation d'une variable dans un constructeur - C++ - Programmation

Marsh Posté le 08-03-2004 à 17:10:14    

bonjour,
j'ai petite question de C++ :  
lorsque vous avez un constructeur d'une classe comme suit :  
 
maClasse(const int n, const int v0, const int v1) : m_var(v0, v1);  
 
et que vous voulez changer le constructeur en :  
 
maClasse(const int n, const int v0, const int v1 ...) : m_var(???);  
 
qu'est-ce qui faut mettre dans m_var?


---------------
"il n'y a que deux choses qui sont infinies, l'univers et la betise humaine ... et encore pour l'univers je n'en suis pas sûr !!!" Einstein
Reply

Marsh Posté le 08-03-2004 à 17:10:14   

Reply

Marsh Posté le 08-03-2004 à 17:11:24    

t'es sur que t'as compris ce que c'est que l'initialisation de m_var ?

Reply

Marsh Posté le 08-03-2004 à 17:11:51    

ben ça dépend des arguments de m_var()
 
edit: [:benou_grilled], à croire qu'il a un bot :D


Message édité par Harkonnen le 08-03-2004 à 17:12:18
Reply

Marsh Posté le 08-03-2004 à 17:16:09    

Harkonnen a écrit :


edit: [:benou_grilled], à croire qu'il a un bot :D

j'en suis un en fait

Reply

Marsh Posté le 08-03-2004 à 18:06:58    

pour être plus explicite, j'ai une classe avec le constructeur maClasse(const int n, const int v0, const int v1 ...);
j'ai une autre classe qui hérite de cette classe
class C2 : public maClass {
private :
  maClass m_var;
public:
  C2 (const int n, const int v0, const int v1 ...);
};
 
et je dois initialiser m_var;
Une des méthodes étant de faire
  C2 (const int n, const int v0, const int v1) : m_var(n, v0, v1);
mais si on a "..." à la fin du constructeur, on fait comment pour initialiser m_var?
Si jamais c'est pas encore assez clair, je mettrais un exemple complet... :p
mici d'avance ;)


---------------
"il n'y a que deux choses qui sont infinies, l'univers et la betise humaine ... et encore pour l'univers je n'en suis pas sûr !!!" Einstein
Reply

Marsh Posté le 08-03-2004 à 18:09:31    

ça existe ça les va_args pour les constructeurs ? si ça passe (ou si certains compilateurs l'accèptent), je déconseille absolutement

Reply

Marsh Posté le 08-03-2004 à 18:14:37    

mais pour répondre à ta question, non tu ne peux pas t'en sortir, il faut utilisé les macro va_* pour amorcer le traitement, donc impossible dans l'une initialisation


Message édité par Taz le 08-03-2004 à 18:15:16
Reply

Marsh Posté le 08-03-2004 à 19:00:57    

Taz a écrit :

j'en suis un en fait


 
case DEFAULT:
    cout<<"Ta gueule  :o\n";
 
? :D

Reply

Marsh Posté le 08-03-2004 à 19:01:40    

bjone a écrit :


 
case DEFAULT:
    cout<<"Ta gueule  :o\n";
 
? :D

default: std::cout << "Ta chatte :o !" << std::flush;

Reply

Marsh Posté le 08-03-2004 à 19:02:07    

sinon kptn , tu veux quoi initiliser une liste ou un truc du genre ?

Reply

Marsh Posté le 08-03-2004 à 19:02:07   

Reply

Marsh Posté le 08-03-2004 à 19:02:43    

Taz a écrit :

default: std::cout << "Ta chatte :o !" << std::flush;


 
 :lol:

Reply

Marsh Posté le 09-03-2004 à 10:55:18    

J'explique mon probleme :  
j'ai une librairie statique qui marche sous vc++ et je dois la faire marcher sous builder. Pour ça, je dois créer une interface pour chaque classe, ainsi qu'une classe qui implémente cette interface et c'est cette dernière qui va possèder en private une instance de la classe d'origine.

Code :
  1. //Ex : classe de la librairie statique
  2. class C1 {
  3.   int _value;
  4. public:
  5.   C1(const int value) : _value(value) {}
  6.   int getValue() const {return _value;}
  7.   int traitement();
  8. };
  9. //interface :
  10. class iC1 {
  11. public:
  12.   virtual int __stdcall getValue();
  13.   virtual int __stdcall traitement();
  14.   virtual __stdcall ~iC1
  15. };
  16. //Implémentation de l'interface :
  17. class C1Impl : public iC1 {
  18. private:
  19.    C1 m_C1;
  20. public:
  21.    C1Impl(const int value) : m_C1(value) {};
  22.    virtual int __stdcall getValue() {return m_C1.getValue();}
  23.    virtual int __stdcall traitement() {return m_C1.traitement();}
  24. };


Ensuite il suffit de définir un constructeur et un destructeur externe à la classe, mais bon, ça c'est une autre histoire...
Mon problème est que si la classe d'origine est définie comme suit :

Code :
  1. typedef int<double> t1;
  2. class C2 : public t1 {
  3. public :
  4.   C2(const int a, int n, C1 v0 ...);
  5. };


Et là, je dois faire C2Impl, mais comment...?
Sans compté que je n'ai pas l'implémentation de C1 ou C2 sans quoi je n'aurais pas eu à m'emmerder à faire tt ça ^_^
 
Voilà, j'espère que les explications sont suffisantes... Mais mon espoir de pouvoir en faire qq chose s'amenuise...


Message édité par kptn le 09-03-2004 à 16:48:04

---------------
"il n'y a que deux choses qui sont infinies, l'univers et la betise humaine ... et encore pour l'univers je n'en suis pas sûr !!!" Einstein
Reply

Marsh Posté le 09-03-2004 à 11:11:07    

typedef int<double>
 
t'as fini tes conneries :o

Reply

Marsh Posté le 09-03-2004 à 11:59:31    

Ouais, t'as raison, à force de vouloir trop simplifier la ralité j'ai dis une grosse connerie...
En fait le typedef est défini comme suit
je te met les trucs tels qui sont dans lmon fichier :
 
typedef IloSimpleArray<IloNum> IloNumArrayBase;
avec  
typedef double IloNum;
et
#define IloSimpleArray Array4
avec Array4 une classe du type
template <class X> class IloArray4;
 
Mais bon, ça change pas grand chose au pb d'origine...


---------------
"il n'y a que deux choses qui sont infinies, l'univers et la betise humaine ... et encore pour l'univers je n'en suis pas sûr !!!" Einstein
Reply

Marsh Posté le 09-03-2004 à 13:39:00    

ecoute file du vrai code entre cpp
 
C2(const int a, int n, C1 v0 ...);  :o

Reply

Marsh Posté le 09-03-2004 à 15:04:32    

puisque tu insistes...
 

Code :
  1. typedef double IloNum;
  2. template <class X> class IloArray4;
  3. template <class X> class IloROArray4 : public IloROHandle {
  4. protected:
  5.   inline X *data(IloInt i) const {
  6.     return &((X*)getImpl()->getBase(i))[i&getImpl()->getMod()];
  7.   }
  8. public:
  9.   IloROArray4(IloArray4I* impl) : IloROHandle(impl) {}
  10.   IloROArray4() : IloROHandle() {}
  11.   IloArray4I* getImpl() const { return (IloArray4I*)IloROHandle::getImpl(); }
  12.   IloInt getSize() const {
  13.     IloAssert(getImpl(), "Empty Handle in IloROArray::getSize" );
  14.     return getImpl()->getSize();
  15.   }
  16.   X operator[] (IloInt i) const {
  17.     IloAssert(getImpl(), "Empty Handle in IloROArray::operator[]" );
  18.     return *data(i);
  19.   }
  20.   IloArray4I* unlock() {
  21.     return (IloArray4I*)IloROHandle::unlock();
  22.   }
  23. };
  24. #define IloSimpleArray IloArray4
  25. typedef IloSimpleArray<IloNum> IloNumArrayBase;
  26. class IloNumArray : public IloNumArrayBase {
  27. public:
  28.   IloNumArray(IloArrayI* i=0) : IloNumArrayBase(i) {}
  29.   IloNumArray(const IloNumArray& cpy) : IloNumArrayBase(cpy)    {}
  30.   IloNumArray(const IloEnv env, IloInt n = 0);
  31.   IloNumArray(const IloEnv env, IloInt n, IloNum v0, IloNum v1 ...);
  32.   IloNumArray(const IloEnv env, int n, IloNum v0, IloNum v1 ...);
  33.   IloNumArray(const IloEnv env, IloInt n, IloInt v0, IloInt v1 ...);
  34.   IloNumArray(const IloEnv env, int n, int v0, int v1 ...);
  35.   IloNumArray(const IloEnv env, IloInt n, int v0, int v1 ...);
  36.   IloNumArray(const IloEnv env, int n, IloInt v0, IloInt v1 ...);
  37.   IloExprNode operator() (IloIntVar) const;
  38. };


 
Voilà le code cpp d'origine... Si ça peut aider...
 
Edit Harkonnen : les balises [ cpp] et [/ cpp] ne sont pas faites pour les chiens :o


Message édité par kptn le 09-03-2004 à 15:06:34

---------------
"il n'y a que deux choses qui sont infinies, l'univers et la betise humaine ... et encore pour l'univers je n'en suis pas sûr !!!" Einstein
Reply

Marsh Posté le 09-03-2004 à 15:48:30    

encore eut-il fallu les connaîtres c balises...
je le saurais pour la prochaine fois :p
Enfin... ça me donne pas la réponse à mon pb... :(


---------------
"il n'y a que deux choses qui sont infinies, l'univers et la betise humaine ... et encore pour l'univers je n'en suis pas sûr !!!" Einstein
Reply

Marsh Posté le 09-03-2004 à 15:52:19    

kptn a écrit :

encore eut-il fallu les connaîtres c balises...


elles sont pas assez visibles dans le formulaire de réponse ? :o

Reply

Marsh Posté le 09-03-2004 à 16:44:17    

j'utilisais le textbox "Réponse rapide", donc non les balises sont pas visibles :p
M'enfin, j'aurais du y regarder un peu plus avant...
Mais bon, c bien beau de critique la forme, mais ça fait pas avancer le shmilblick pour antant...!!
...
...
tant pis... j'arriverais bien à trouver qq chose par moi même


---------------
"il n'y a que deux choses qui sont infinies, l'univers et la betise humaine ... et encore pour l'univers je n'en suis pas sûr !!!" Einstein
Reply

Marsh Posté le 09-03-2004 à 16:46:46    

au fait, j'ai oublié :
"A mort les Harkonnen! Vive les Atreides!!"  :D


---------------
"il n'y a que deux choses qui sont infinies, l'univers et la betise humaine ... et encore pour l'univers je n'en suis pas sûr !!!" Einstein
Reply

Marsh Posté le 09-03-2004 à 17:15:02    

IloNum v1 ...);  
 
 
non fait faut pas rigoler, ça c'est absolument ni du C, ni du C++, si VC++ accepte ça, c'est de la folie douce

Reply

Marsh Posté le 09-03-2004 à 17:48:07    

Taz a écrit :

IloNum v1 ...);  
 
 
non fait faut pas rigoler, ça c'est absolument ni du C, ni du C++, si VC++ accepte ça, c'est de la folie douce


 
à ma conaissance ni VC++ (6) ni C++ Builder doivent bouffer ça...

Reply

Marsh Posté le 09-03-2004 à 17:50:23    

ni personne normalement

Reply

Marsh Posté le 09-03-2004 à 18:09:24    

pourtant j'ai une lib statique qui a été compilé avec vc++ 6 et les .h possèdent ça... dc le compilo doit bien l'accepter...
 
C kler que si ct moi, je ne me serais pas amuser à mettre un truc pareil :p


---------------
"il n'y a que deux choses qui sont infinies, l'univers et la betise humaine ... et encore pour l'univers je n'en suis pas sûr !!!" Einstein
Reply

Marsh Posté le 09-03-2004 à 18:11:43    

ben vas y fait un test, crée un truc avec une pareille signature
moi je sors


Message édité par Taz le 09-03-2004 à 18:11:58
Reply

Marsh Posté le 09-03-2004 à 18:14:28    

les fichiers que j'ai compilent...
mais bon, je ferais un test avec un seul fichier demain histoire de savoir ce qu'il y a derrière exactement et je te dirais ça ;)


---------------
"il n'y a que deux choses qui sont infinies, l'univers et la betise humaine ... et encore pour l'univers je n'en suis pas sûr !!!" Einstein
Reply

Marsh Posté le 09-03-2004 à 20:24:03    

fo faire une routine qui se balade sur la pile....
bonjour le truc casse-gueule... (surtout que passer un pointeur sur Ilo serait ptet plus propre quand même)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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