Löschen von virtuellen Funktion in einer abgeleiteten Klasse

Habe ich eine virtuelle Basisklasse Funktion, die sollten nie benutzt werden, in einer bestimmten abgeleiteten Klasse. Gibt es eine Möglichkeit zu "löschen"? Ich kann es natürlich nur geben Sie eine leere definition, aber ich würde lieber machen versuchten verwenden, werfen Sie einen compile-Zeit-Fehler. Die C++11 delete Planer scheint, wie das, was ich möchte, aber

class B
{
    virtual void f();
};

class D : public B
{
    virtual void f() = delete; //Error
};

nicht kompilieren; gcc, zumindest explizit nicht lassen Sie mich löschen Sie eine Funktion, die eine nicht-gelöscht-base-version. Gibt es einen anderen Weg, um die gleiche Funktionalität zu erhalten?

Wie ist es möglich? Möchten Sie die compiler-Fehlermeldung in D *d = new D(); static_cast<B *>(d)->f()?
Wenn der Zauber auf Zeiger auf Basisklasse, dann sollte es wirken wie ein Zeiger auf Basisklasse,--in dem Fall D::f würde noch genannt, bekommen, also ja.
Und welches Verhalten würden Sie erwarten, dass in diesem Fall dann?
Geändert, meine Antwort zu Bryan Chen Frage, vergaß für einen moment, dass die abgeleitete Klasse Funktionen noch genannt, bekommen nach dem casting einen Zeiger auf Basisklasse.
Ich glaube, Sie missverstanden die Nutzung der delete Schlüsselwort. Die delete Schlüsselwort ist nicht vorgesehen, die remove-Methode aus der Kind-Klasse, die würden brechen Regeln der Vererbung, die es verwendet werden soll, deaktivieren Sie bestimmten Anruf (wie kopieren aufrufen oder aufrufen von bestimmten Typ von Parametern).

InformationsquelleAutor Matt Phillips | 2014-07-07

Schreibe einen Kommentar