2010-03-14 3 views
8

les gars je sais que cette question est très basique mais j'ai rencontré dans quelques publications (sites web, livres) différents styles de fonction virtuelle de remplacement. Ce que je veux dire est: si je classe de base:Comment remplacer la fonction virtuelle dans un bon style? [C++]

class Base 
{ 
public: 
virtual void f() = 0; 
}; 

dans certaines publications j'ai vu que de passer outre ce que certains auteurs seraient simplement dire:

void f();  

et certains seraient encore répéter le mot-clé virtuelle avant vide . Quelle forme d'écrasement est de bon style? Merci pour vos réponses.

+0

@James McNellis - Merci, pour une raison étrange (et la raison en est qu'en Pologne, nous l'appelons écraser (Dieu pourquoi devons-nous essayer d'être toujours un peu plus intelligent en Pologne)) J'étais convaincu que la bonne façon d'appeler ce mécanisme. Merci encore. –

Répondre

13

Ceci est purement une question de goût. Certains arguments faibles peuvent être avancés en ce qui concerne la valeur d'auto-documentation de certains styles par rapport à la non-redondance des autres.

+0

Sympa de voir la première réponse est la meilleure. Notez également que la nouvelle norme ajoute des décorateurs à doc et vérifie juste pourquoi vous surchargez, écrasez, cachez, etc. –

3

Il n'est pas nécessaire d'ajouter le mot clé virtuel à une méthode que vous substituez dans une sous-classe car ce qualificatif ne peut pas être supprimé en l'omettant dans les déclarations de sous-classe.

Il est toutefois recommandé de répéter le mot clé virtuel car il documente les fonctions dérivées qui sont virtuelles dans la classe de base.

Ceci est également recommandé par le 'High Integrity C++ Coding Standard Manual'.

qui est liée dans le C++ FAQ.

0

J'utilise personnellement les deux styles: virtual signifie que la méthode peut être surchargée.

Nous avons donc deux cas:

  • si vous souhaitez que l'utilisateur de votre classe pour savoir que la méthode peut être surchargée, utilisez le mot-clé virtual
  • si vous préférez cacher ce fait (parce que vous fournir de nouvelles méthodes, par exemple suivant la Template Pattern), alors ne pas utiliser le mot-clé virtual

Je pense qu'il est encore une autre façon de (ab?) en utilisant le mot-clé.

Questions connexes