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

  FORUM HardWare.fr
  Programmation
  C++

  [C++] histoire de constructeurs

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] histoire de constructeurs

n°706630
xterminhat​e
Si vis pacem, para bellum.
Posté le 23-04-2004 à 01:36:00  profilanswer
 

Je souhaiterais ajouter une fonctionnalité à std::vector<>. Je créé donc une struct/class par héritage.  

Code :
  1. template<typename T>
  2. struct vector_ameliore : public std::vector<T>
  3. {
  4. /***/
  5. };


 
Afin de pouvoir utiliser les différents constructeurs de std::vector<>, est ce que je dois vraiment me les 'taper' un par un dans la classe dérivée ?
 
Genre :

Code :
  1. vector_ameliore(size_type & t ) : std::vector<T>(t) {}
  2. vector_ameliore(const T * b, const T * e ) : std::vector<T>(b,e) {}
  3. /***/


 
D'autre part (c'est un autre pb), comment peut-on créer simplement une classe qui hérite d'un type de base : int, char, enum,...etc.  

Code :
  1. struct int_amelioré : public int
  2. {
  3. /*marche pô!*/
  4. }


 
Cordialement,
   xter.


Message édité par xterminhate le 23-04-2004 à 01:36:23

---------------
Cordialement, Xterm-in'Hate...
mood
Publicité
Posté le 23-04-2004 à 01:36:00  profilanswer
 

n°706640
bjone
Insert booze to continue
Posté le 23-04-2004 à 03:07:08  profilanswer
 

je vais pitètre me faire taper sur les doigts par Taz à un moment donné, mais déjà 'class' à la place de 'struct' c'est mieux dériver une classe :D
 
ensuite pour le surchargage des types de base c'est mort, fo que tu fasse une classe qui comporte le type comme membre privé et des opérateurs de cast pour rendre le bestiaux +ou- transparent. (donc template aussi)
 
pour tes constructeurs, vector<> attends plus de paramètres de template, si tu déclares les même paramètres avec les mêmes valeurs par défaut pour ta template vector_ameliore ce sera mieux...
 
à priori vi t'es obligé de faire les constructeurs :/
 
mais là Taz pourra me corriger là dessus (flageller)...


Message édité par bjone le 23-04-2004 à 03:17:55
n°706641
nraynaud
lol
Posté le 23-04-2004 à 03:19:19  profilanswer
 

Les constructeurs ne sont jamais hérités, pour une raison simple (syntaxe approximative) :

Code :
  1. class A {
  2. private :
  3.   int ma;
  4. public :
  5.   A():ma(10) {};
  6. }
  7. class B : A {
  8. private :
  9.   Zorglub &mb;
  10. }


 
maintenant, si B héritait du constructeur de A, que vaudrait  mb après construction ? il n'a pas le droit d'être nul (donc une valeur par défaut n'existe intrinsèquement pas), et il n'a pas été défini.
 
De même, pour les types pour lesquels une valeur par défaut existe intrinsèquement, il n'y a aucune raison qu'elle soit valide dans l'objet (style un int qiu va se retrouver sous une fraction, on a jamais intérêt à avoir zéro dedans), donc on ne doit pas lui donner dans le dos de l'utilisateur.
 
donc les langages à la C++ (C++, java, C# au moins) n'héritent jamais des constructeurs.


Message édité par nraynaud le 23-04-2004 à 03:20:03

---------------
trainoo.com, c'est fini
n°706652
Taz
bisounours-codeur
Posté le 23-04-2004 à 07:17:42  profilanswer
 

faut hériter de vector public, son destructeur est pas virtuel, problème en vue. STL est pas faite pour ça, je déconseille. après il est claire que t'as jamais vu un truc STL, avant de faire n'importe quoi, tu ferais bien de sérieusement étudié l'interface de std::vector ... juste comme ça tu m'améliores en quoi ?

n°706660
xterminhat​e
Si vis pacem, para bellum.
Posté le 23-04-2004 à 08:08:00  profilanswer
 

A la base j'ai un programme qui manipule bcp de vector<T> (avec T perso basé sur un enum, mais peu importe). Dans mon programme, j'ai donc tout un ensemble de fonctions et procédures qui prennent en argument un (ou plusieurs) vector<T> et réalisent un traitement.
 
Je me demandais s'il n'etait pas possible d'en faire une classe à part entière, tout en conservant l'interface standard de vector.
 
Effectivement, c'est peut etre pas une bonne idée. Ou alors c'est au prix de perdre l'interface de vector et de créer une interface spécifique.  
 
Cordialement,
   Xter.


Message édité par xterminhate le 23-04-2004 à 08:23:26

---------------
Cordialement, Xterm-in'Hate...
n°706661
xterminhat​e
Si vis pacem, para bellum.
Posté le 23-04-2004 à 08:10:16  profilanswer
 

nraynaud >> ok pour ton exemple, mais je suis dans la cas complètement inverse. Je fournis au constructeur les arguments du/des constructeur(s) de vector. Je suis donc obligé d'écrire un par un des constructeurs et destructeur quasiment vides (sous forme d'une simple "passerelle" vers ceux de vector).
 
Cordialement,
   Xter.


Message édité par xterminhate le 23-04-2004 à 08:13:29

---------------
Cordialement, Xterm-in'Hate...
n°706666
xterminhat​e
Si vis pacem, para bellum.
Posté le 23-04-2004 à 08:21:27  profilanswer
 

bjone a écrit :

ensuite pour la surchargage des types de base c'est mort, fo que tu fasse une classe qui comporte le type comme membre privé et des opérateurs de cast pour rendre le bestiaux +ou- transparent. (donc template aussi)


 
Je sais bien, mais je cherche une autre solution. Sinon, l'exercice n'est pas ininteressant (réécrire tous les opérateurs) mais je trouve ca un peu lourd comme code ;)
 
Cordialement,
   xter.


Message édité par xterminhate le 23-04-2004 à 08:22:15

---------------
Cordialement, Xterm-in'Hate...
n°706746
Ace17
Posté le 23-04-2004 à 09:49:52  profilanswer
 

Il ne s'agit pas de réécrire tous les opérateurs, mais seulement leur interface, leur implémentation se contentant de déléguer le boulot a vector

n°707003
xterminhat​e
Si vis pacem, para bellum.
Posté le 23-04-2004 à 12:57:26  profilanswer
 

Bien entendu :)


---------------
Cordialement, Xterm-in'Hate...
n°707009
Taz
bisounours-codeur
Posté le 23-04-2004 à 13:00:03  profilanswer
 

xterminhate a écrit :

A la base j'ai un programme qui manipule bcp de vector<T> (avec T perso basé sur un enum, mais peu importe). Dans mon programme, j'ai donc tout un ensemble de fonctions et procédures qui prennent en argument un (ou plusieurs) vector<T> et réalisent un traitement.
 
Je me demandais s'il n'etait pas possible d'en faire une classe à part entière, tout en conservant l'interface standard de vector.
 
Effectivement, c'est peut etre pas une bonne idée. Ou alors c'est au prix de perdre l'interface de vector et de créer une interface spécifique.  
 
Cordialement,
   Xter.

mais t'en as besoin pourquoi ? si tu rajoutes rien ...

mood
Publicité
Posté le 23-04-2004 à 13:00:03  profilanswer
 

n°707022
xterminhat​e
Si vis pacem, para bellum.
Posté le 23-04-2004 à 13:07:08  profilanswer
 

J'ajoute entre autres une fonction Serialize spécifique.
 
Au lieu de faire un appel de fonction classique...

Code :
  1. std::string Serialize( std::vector<T> )) {/**/}


 
...je preferais encapsuler par

Code :
  1. std::string std::vector_ameliore::Serialize() {/**/}


 
Tu comprends ?
 
Xter.


---------------
Cordialement, Xterm-in'Hate...
n°707024
Taz
bisounours-codeur
Posté le 23-04-2004 à 13:08:39  profilanswer
 

t'as faire un operator ou un truc comme ça ... mais bon là c'est pas méchant 2 fonctions, c'est pas grave, surtout que je vois une classe Serializer avec 2 fonctions membres

n°707029
xterminhat​e
Si vis pacem, para bellum.
Posté le 23-04-2004 à 13:11:51  profilanswer
 

C'est clair, je me prends la tete pour pas grand chose finalement. D'ailleurs, mes idées apres 1h du mat' sont souvent pourris, la preuve ! :)
 
Cordialement,
 Xter.


---------------
Cordialement, Xterm-in'Hate...
n°707031
Taz
bisounours-codeur
Posté le 23-04-2004 à 13:12:32  profilanswer
 

le vrai problème n'étant jamais le constructeur, mais le type de données contenu


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

  [C++] histoire de constructeurs

 

Sujets relatifs
[comics] histoire de la prog'[C#] C# et les constructeurs
[C++] Histoire de membres statiquesHistoire de placement de noeuds et de liens...
une histoire d'allocateur mémoireconstructeurs et droits d'acces
[SQL] Une histoire de requete et de date...Histoire de cookies...
[C++, C#, Java] constructeurs, attention au code généré par le compiloHistoire de chemin relatif...
Plus de sujets relatifs à : [C++] histoire de constructeurs


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)