Conception objet

Conception objet - C++ - Programmation

Marsh Posté le 11-08-2003 à 17:30:44    

Voila, je me pose des questions sur mon programme qui me tracassent un peu la tete :
 
1)Je dispose de 2 classes definient sommairement ainsi :
 

Code :
  1. class CShared_buffer
  2. (
  3. private :
  4. ...
  5. public :
  6. CShared_buffer(const char * name, size_t siz_elt, unsigned long size); //mon seul constructeur
  7. );
  8. class CCard_comm : public CShared_buffer
  9. {
  10. private :
  11. ...
  12. public :
  13. CCard_comm(); //mon seul constructeur
  14. );


 
La definition du constructeur de la classe CCard_comm doit donc faire appel au constructeur de la classe CShared_buffer.
Sa definition commence ainsi (dans le .cpp):
 

Code :
  1. CCard_comm::CCard_comm(void)
  2. {
  3. CShared_buffer::CShared_buffer("bufRig2Ss", sizeof(long), 1000);
  4. ...
  5. )


 
Ma question : le troisieme argument de valeur "1000" du constructeur de la classe de base est code en dur. Si je souhaite le passer en variable, le prototype du constructeur de la classe derivee deviendrait :

Code :
  1. CCard_comm::CCard_comm(int val)


...alors que cet argument n'a aucun rapport avec la classe derivee (CCard_comm) mais avec la classe de base (CShared_buffer). Dans le cas d'un arbre "genealogique" (vous comprenez ? :D) tres "profond", si on procederait ainsi, la classe la "moins basique" aurait un nombre d'argument considerable :/...comment resoudre ce probleme ?
 
2) Un constructeur de classe, par definition, ne renvoit pas de valeur. Si ce constructeur DOIT en renvoyee une (dans mon cas du test d'un fopen par exemple), le constructeur reviendrait a appeler une fonction uniquement pour feinter alors (qui pourra renvoyee une valeur)...est-ce la bonne facon de proceder ?  :heink:

Reply

Marsh Posté le 11-08-2003 à 17:30:44   

Reply

Marsh Posté le 11-08-2003 à 18:34:17    

:bounce:

Reply

Marsh Posté le 11-08-2003 à 18:45:14    

giz a écrit :

si on procederait ainsi, la classe la "moins basique" aurait un nombre d'argument considerable :/...comment resoudre ce probleme ?


class A
{
  A(creationStructure cs);
};
 
class B
{
  B(creationStructure cs);
};
 
// pour a  
struct creationStructure
{
  int a, b;
};
 
// pour b
struct creationStructureB : public creationStructure
{
  int c, d;
}
 
puis dans le code :
B::B(creationStructure cs)
{
  creationStructureB* csb = (creationStructureB*)&cs;
}
 
Méthode standard. Je n'aime pas trop, un hash est sûrement plus simple.
 
 

giz a écrit :

2) Un constructeur de classe, par definition, ne renvoit pas de valeur. Si ce constructeur DOIT en renvoyee une (dans mon cas du test d'un fopen par exemple), le constructeur reviendrait a appeler une fonction uniquement pour feinter alors (qui pourra renvoyee une valeur)...est-ce la bonne facon de proceder ?

Ton objet a deux méthodes importantes : le constructeur qui initialise un objet 'vide' mais valide (pointeurs à null, etc) et une méthode Create() qui prend la structure de création et s'occupe de créer l'objet.

Reply

Marsh Posté le 11-08-2003 à 20:38:08    

<<Un constructeur de classe, par definition, ne renvoit pas de valeur. Si ce constructeur DOIT en renvoyee une (dans mon cas du test d'un fopen par exemple)...>>
 
Formulation superbizarre qd même! D'une certaine manière, le constructeur "renvoie" l'objet qu'il construit, c'est déjà pas mal, non?

Reply

Sujets relatifs:

Leave a Replay

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