histoire de constructeurs [C++] - C++ - Programmation
Marsh Posté le 23-04-2004 à 03:07:08
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
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)...
Marsh Posté le 23-04-2004 à 03:19:19
Les constructeurs ne sont jamais hérités, pour une raison simple (syntaxe approximative) :
Code :
|
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.
Marsh Posté le 23-04-2004 à 07:17:42
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 ?
Marsh Posté le 23-04-2004 à 08:08:00
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.
Marsh Posté le 23-04-2004 à 08:10:16
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.
Marsh Posté le 23-04-2004 à 08:21:27
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.
Marsh Posté le 23-04-2004 à 09:49:52
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
Marsh Posté le 23-04-2004 à 12:57:26
Bien entendu
Marsh Posté le 23-04-2004 à 13:00:03
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. |
mais t'en as besoin pourquoi ? si tu rajoutes rien ...
Marsh Posté le 23-04-2004 à 13:07:08
J'ajoute entre autres une fonction Serialize spécifique.
Au lieu de faire un appel de fonction classique...
Code :
|
...je preferais encapsuler par
Code :
|
Tu comprends ?
Xter.
Marsh Posté le 23-04-2004 à 13:08:39
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
Marsh Posté le 23-04-2004 à 13:11:51
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.
Marsh Posté le 23-04-2004 à 13:12:32
le vrai problème n'étant jamais le constructeur, mais le type de données contenu
Marsh Posté le 23-04-2004 à 01:36:00
Je souhaiterais ajouter une fonctionnalité à std::vector<>. Je créé donc une struct/class par héritage.
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 :
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.
Cordialement,
xter.
Message édité par xterminhate le 23-04-2004 à 01:36:23
---------------
Cordialement, Xterm-in'Hate...