2010-10-08 13 views
7

Fondamentalement, je veux la fonctionnalité du compilateur C# de son mot-clé override dans mon code C++.Existe-t-il un moyen de marquer (au moment de la compilation) les méthodes "surchargées" dont les signatures ne correspondent pas à la signature de base?

class Base 
{ 
    virtual int foo(int) const; 
}; 

class Derived : public Base 
{ 
    virtual int foo(int); // wanted to override Base, but forgot to declare it const 
}; 

Comme nous le savons tous, le code ci-dessus se compilera correctement, mais donnera un comportement étrange à l'exécution. J'aimerais mon compilateur C++ pour attraper ma mauvaise implémentation avec quelque chose comme le mot-clé override de C#. Y a-t-il des mots-clés comme "override" qui sont introduits en C++, ou sommes-nous bloqués avec #define override virtual pour montrer notre intention? (en fait, je ne fais pas cela - je déteste utiliser le préprocesseur pour "étendre" la langue).

Répondre

1

Si vous ne pouvez pas attendre C++ 0x, Visual C++ a déjà ce mot-clé de remplacement. (Depuis 2005 je crois). La syntaxe est la suivante:

virtual int foo(int) override; 

Vous n'êtes pas obligé de le taper, cependant. Et c'est une extension non-standard de Microsoft.

+0

des excuses à Naveen - vôtre est la bonne réponse "future"; Cependant, pour mes besoins actuels (j'utilise VS2005), cela fonctionne !! J'ai marqué cette réponse comme "répondant" à ma question, mais la réponse de +1 Naveen – franji1

3

Pour autant que je sache, ce n'est pas possible avec la norme actuelle. Vous pouvez le faire dans le prochain C++ 0x. Voir ici pour plus de détails: Explicit virtual function overrides

+0

Chaque fois que je découvre quelque chose à propos de C++ 0x, je trouve la syntaxe plus laide et plus laide ... Sûrement juste moi? – dreamlax

+0

+1: voir mon commentaire sur "répondu" qeustion – franji1