Überschreiben von öffentlichen virtuellen Funktionen mit privaten Funktionen in C ++

Ist, es gibt keinen Grund, um die Berechtigungen für eine überschriebene virtuelle C++ - Funktion unterscheidet sich von der Basisklasse? Besteht irgendeine Gefahr dabei?

Beispiel:

class base {
    public:
        virtual int foo(double) = 0;
}

class child : public base {
    private:
        virtual int foo(double);
}

Den C++ - faq sagt, dass es eine schlechte Idee ist, aber nicht sagen, warum.

Habe ich gesehen, dass dieses idiom in einigen code, und ich glaube, dass der Autor versucht hat, um die Klasse final, basierend auf der Annahme, dass es nicht möglich ist, zu überschreiben, eine private member-Funktion. Allerdings Dieser Artikel zeigt ein Beispiel des überwiegenden privaten Funktionen. Natürlich ein weiterer Teil der C++ - faq abgeraten, dies zu tun.

Meine konkreten Fragen:

  1. Ist es ein technisches problem mit einer anderen Berechtigung für virtuelle Methoden in abgeleiteten Klassen vs Basisklasse?
  2. Ist es eine legitime Grund, dies zu tun?

InformationsquelleAutor der Frage Ben Martin | 2009-01-27

Schreibe einen Kommentar