2010-03-14 10 views
8

Jungs Ich weiß, diese Frage ist sehr einfach, aber ich habe in einigen Publikationen (Websites, Bücher) verschiedene Stil der override virtuellen Funktion getroffen. Was ich meine ist: wenn ich Basisklasse:Wie überschreiben virtuelle Funktion in gutem Stil? [C++]

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

in einigen Publikationen sah ich, dass diese außer Kraft zu setzen einige Autoren würde sagen, nur:

void f();  

und einige würden noch die virtuelle Schlüsselwort wiederholen, bevor nichtig . Welche Form des Überschreibens ist in gutem Stil? Vielen Dank für Ihre Antworten.

+0

@James McNellis - Danke, aus irgendeinem seltsamen Grund (und der Grund ist, dass wir es in Polen Überschreiben nennen (Gott, warum müssen wir versuchen, in Polen immer etwas schlauer zu sein)) Ich war davon überzeugt, dass das Richtige Möglichkeit, diesen Mechanismus aufzurufen. Danke noch einmal. –

Antwort

13

Das ist reine Geschmackssache. Einige schwache Argumente können hin und her hinsichtlich des Selbstdokumentationswerts einiger Stile gegenüber der Nicht-Redundanz anderer gemacht werden.

+0

Schön die erste Antwort zu sehen ist die beste. Beachten Sie auch, dass der neue Standard einige Dekoratoren zu doc ​​hinzufügt und überprüft, warum Sie überladen, überschreiben, verstecken, usw –

3

Es ist nicht erforderlich, das virtuelle Schlüsselwort zu einer Methode hinzuzufügen, die Sie in einer Unterklasse überschreiben, da dieses Qualifikationsmerkmal nicht entfernt werden kann, indem Sie es in Unterklassen-Deklarationen auslassen.

Es empfiehlt sich jedoch, das virtuelle Schlüsselwort zu wiederholen, da es dokumentiert, welche abgeleiteten Funktionen in der Basisklasse virtuell sind.

Dies wird auch von der 'High Integrity C++ Coding Standard Manual' empfohlen.

, die in der C++ FAQ verknüpft ist.

0

Ich persönlich benutze beide Stile: virtual bedeutet, dass die Methode überschrieben werden kann.

So haben wir zwei Fälle:

  • , wenn der Benutzer Ihrer Klasse wollen wissen, dass das Verfahren außer Kraft gesetzt werden kann, verwenden Sie das virtual Stichwort
  • , wenn Sie diese Tatsache zu verbergen, würde es vorziehen, (weil Sie bieten neue Methoden zum Beispiel nach dem Template Pattern), dann nicht das virtual Stichwort

verwende ich denke, es ist noch eine andere Art und Weise von (ab?), um das Schlüsselwort.

Verwandte Themen