2016-06-21 6 views
2

Ist es möglich für mich, eine Klasse mit einer abstrakten Methode zu bauen, sagt AktionKönnen Sie eine abstrakte Funktion in einer abstrakten Klasse in C++ verwenden?

virtual double action (int num1,int num2) const = 0; 

und dann eine Member-Funktion für die gleiche Klasse schreiben, sagt eval

double eval() const 
    { 
    .. 
    //In here we use function "action" 
    .. 
    } 

Denn auf der einer Seite Die Klasse ist abstrakt und daher kann ich keine Instanzen davon erstellen, so dass sie niemals eine abstrakte Funktion ausführen wird. Auf der anderen Seite könnte es nicht sein?

Das Endspiel mit dieser Frage ist, die Funktion in den weiteren Klassen, die meine Klasse erben, nicht aufzuschreiben, und es erscheint sinnvoll, die Funktion eval nur einmal noch mit verschiedenen Aktionsfunktionen zu schreiben.

Antwort

4

Ja, das ist legal. Wenn action von innerhalb eval aufgerufen wird, wird es zum endgültigen Überrührer im dynamischen Typ des tatsächlichen Objekts, auf dem eval aufgerufen wird, das notwendigerweise von einem konkreten (nicht abstrakten) Typ ist, senden.

+0

Vielen Dank! :) wird die Antwort akzeptieren, sobald diese Seite mich auf – Michael

1

Ja, Sie können es tun und dies wird Template Method Pattern genannt. Der Name ist eher verwirrend, da es keine Vorlagen (im C++ Sinne) gibt. Es kann nützlich sein, wenn Unterklassen Teile einer größeren Berechnung spezialisieren (z. B. wie in Ihrem Beispiel).

+0

nicht sicher, warum Downvote lassen wird, wenn es etwas falsch mit dieser Antwort ist, würde ich gerne wissen, was .. – user463035818

Verwandte Themen