Comment faire pour appliquer le mot clé ‘override’?

Existe-t-il un moyen d’imposer l’utilisation du mot clé de override C ++ 11 dans Visual C ++ 2012?

(c.-à-d. si j’oublie de dire override , alors je veux recevoir un avertissement / une erreur.)

C ++ 11 a presque eu ce que vous voulez.

À l’origine, le mot clé override faisait partie d’une proposition plus vaste ( N2928 ) qui incluait également la possibilité d’appliquer son utilisation:

 class A { virtual void f(); }; class B [[base_check]] : public A { void f(); // error! }; class C [[base_check]] : public A { void f [[override]] (); // OK }; 

L’atsortingbut base_check ferait une erreur pour remplacer une fonction virtuelle sans utiliser le mot clé override .

Il y avait aussi un atsortingbut hiding qui dit qu’une fonction cache des fonctions dans la classe de base. Si base_check est utilisé et qu’une fonction en cache une de la classe de base sans hiding c’est une erreur.

Mais la majeure partie de la proposition a été abandonnée et seules les caractéristiques final et de override ont été conservées, sous forme d’identificateurs ayant une signification particulière plutôt que des atsortingbuts.

Il y a peu de façons de faire cela dans VC ++ et des manières équivalentes avec GCC également.

VC ++

Vous trouverez ci-dessous les numéros d’avertissement pertinents dans VC ++:

 C4263 (level 4) 'function': member function does not override any base class virtual member function C4266 (level 4) 'function': no override available for virtual member function from base 'type'; function is hidden 

Pour activer ces deux avertissements, vous pouvez utiliser l’une des options suivantes:

  1. Définissez le niveau d’avertissement sur 4 dans les parameters du projet, puis désactivez les avertissements que vous ne souhaitez pas. C’est ma façon préférée. Pour désactiver les avertissements de niveau 4 indésirables, accédez aux parameters du projet> C / C ++> Avancé, puis entrez les numéros d’avertissement dans la zone Désactiver les avertissements spécifiques.
  2. Activer au-dessus de deux avertissements en utilisant du code.

     #pragma warning(default:4263) #pragma warning(default:4266) 
  3. Activez les deux avertissements ci-dessus dans les parameters du projet> C / C ++> Ligne de commande, puis entrez / w34263 / w34266. Ici, l’option / wNxxxx signifie activer les avertissements xxxx dans le niveau N (N = 3 est le niveau par défaut). Vous pouvez également faire / wdNxxxx qui désactive l’avertissement xxxx dans le niveau N.

GCC

GCC 5.1+ a ajouté un nouvel avertissement suggérant que vous pouvez passer en tant qu’option de ligne de commande -Wsuggest-override .

Bruit

Clang 3.5+ a -Winconsistent-missing-override mais cela ne détecte que les cas si la classe de base utilise la substitution mais pas le parent. Vous voudrez peut-être aussi jeter un coup d’œil à l’outil clang-tidy.