Appel explicite du constructeur de recopie ?
Bonjour,
J'ai un petit problème de fond sur la relation héritage multiple/constructeur de recopie.
Soit une classe FILS qui hérite de deux classes MERE1 et MERE2, toutes deux dotées d'un constructeur de recopie en bonne et due forme.
Code:
1 2 3 4
| class FILS : public MERE1, public MERE2
{
...
} |
Si la classe fils n'a pas de constructeur de recopie déclaré, alors en cas de création par copie, les deux constructeurs de recopie des classes MERE sont appellé automatiquement :
Code:
1 2
| FILS a;
FILS b = a; // appel des constructeur de recopie de MERE1 et MERE2 |
Je souhaite lors de la copie, passer explicitement à MERE1 un argument particulier. En effet, celle-ci est une classe "enregistreuse", qui "piste" les allocations mémoire. Je veux donc lui dire qu'on est en train de créer un objet de type FILS.
Je définit alors un constructeur de recopie pour FILS:
Code:
1 2 3 4 5 6
|
FILS( const FILS& f ) : MERE1( MN_FILS ) // MN_... : Magic Number identifiant le type
{
...ici des recopie des element propres à fils
attr1 = f.attr1;
} |
Problème : dans ce cas, comme je viens de définir un constructeur de recopie pour FILS, celui de MERE2 n'est plus appelé !
Je pourrais bien sûr dupliquer ce qu'il fait dans le constructeur de recopie de FILS, mais ça ne serait pas très élégant...
Y a-t-il une solution pour appeler explicitement le constructeur de recopie d'une classe dont on hérite ?
Ou alors une autre solution ?
Je pense que la solution au problème concret (traçage des allocation) pourrait se résoudre par l'utilisation de l'identification dynamique de type (typeinfo / typeid), mais le fond de la question (appel explicite du constructeur de recopie d'une classe de base) m'intéresse quand même.
Merci d'avance pour vos réponses.