2012-04-15 8 views
1

Ich weiß nicht, ob es möglich ist, aber es gibt ein einfaches Beispiel, was ich erreichen sollte: Ich muss die erste reine virtuelle Funktion verwenden, weil es eine Menge gibt von abgeleiteten Klassen, die es brauchen. Einige abgeleitete Klassen benötigen jedoch auch den zweiten Parameter.C++ cli reine virtuelle Funktion überladen (oder deaktivieren?)

Es ist die Basisklasse Auto:

public ref class Car abstract 
{ 
..... 
public: 
    virtual void move(Road^road) = 0; //I am not allowed to delete this line 
    //virtual void move(Road^road, Parameter2^parameter2) = 0; //overload 
} 

Ist es möglich, die rein virtuelle Funktion zu überlasten? Oder im schlimmsten Fall diese Funktion in den wenigen Klassen zu deaktivieren, die zwei Parameter benötigen?

ich gerade lerne, sorry für dumme Fragen ..

+0

Geben Sie einen Standardwert für Parameter 2? –

+0

Das könnte eine Lösung sein. Aber es gibt einige Klassen, die auch Parameter3 und Parameter4 benötigen. Viele unnötige Parameter. Oder ich wusste nicht, was was dieser Standardwert bedeutet :) –

Antwort

2

Es ist certaily möglich, eine virtuelle Funktion zu überlasten. Welcher aufgerufen wird, basiert auf der Anzahl (und dem Typ) der Funktionsparameter. Beachten Sie, dass reine virtuelle Funktionen ('= 0') allen abgeleiteten Klassen die Anforderung auferlegen, alle rein virtuellen Funktionen der Basisklasse zu implementieren (oder auch selbst abstrakt zu sein und die Anforderung an weitere abgeleitete Klassen weiterzugeben).

Wenn Sie die Signatur/Körper der ersten Erklärung ändern können, können Sie mit nur einer Funktion weg, aber:

virtual void move(Road^road, Parameter2^parameter2 = 0) = 0; 

, die einen Standardparameter zu parameter2 zuweist, wenn keine explizit auf die zugeführt wird, Zeit des Anrufens. Dann muss die Logik identisch mit Ihrem ersten Fall sein (no parameter2), wenn der Wert parameter2 0 ist.

+0

Ich kann diese Erklärung ändern. Danke für die Antwort, ich denke, das wird eine gute Lösung sein. –