2009-11-24 14 views
1

J'ai besoin de savoir comment faire fonctionner quelque chose. J'ai une classe avec un constructeur et certaines constantes initialisées dans la liste d'initialisation. Ce que je veux, c'est pouvoir créer un constructeur différent qui prend des paramètres supplémentaires tout en utilisant la liste des initialiseurs. Comme si:Surcharge Construction par défaut avec la liste d'initialiseurs

class TestClass 
{ 
    const int cVal; 
    int newX; 
    TestClass(int x) : cVal(10) 
    { newX = x + 1; } 
    TestClass(int i, int j) : TestClass(i) 
    { newX += j; } 
} 

Exemple totalement terrible, mais il obtient le point à travers. La question est, comment puis-je faire fonctionner cela?

Répondre

6

Un constructeur ne peut pas déléguer à un autre constructeur de la même classe. Vous pouvez refactoriser du code commun dans une fonction membre statique, mais cette dernière ne peut pas initialiser les champs, vous devrez donc répéter les initialiseurs de champ dans chaque constructeur que vous avez. Si un initialiseur de champ particulier a une expression compliquée qui calcule la valeur, vous pouvez le refactoriser dans une fonction membre statique afin qu'il puisse être réutilisé dans tous les constructeurs.

Ceci est un inconvénient connu, et un moyen de déléguer à un autre constructeur sera fourni en C++ 0x.

0

Vous ne pouvez pas faire cela en C++ 03, vous devrez retaper la liste d'initialisation. Cela sera corrigé en C++ 0x. Par coïncidence, la syntaxe est exactement ce que vous avez, et même plus par hasard, le example on Wikipedia est presque votre code. :)