Rein virtuelle Methoden in abgeleiteten abstrakten Klasse

Sagen, wir haben diese:

class A
{
   public:
   virtual void foo() = 0;
};

class B: public A
{
   public:
   virtual void foo() = 0;
};

Der compiler wirft keine Fehler, ich denke, es ist weil B ist ebenfalls eine abstrakte Klasse ist und als solche Sie nicht haben, zu implementieren foo aus A.
Aber was hat solch ein Konstrukt zu bedeuten?

1) foo von B ausblenden foo aus?

2) Die erste Klasse, die erbt von B und ist nicht eine abstrakte Klasse ist, muss es zwei Implementierungen wie:

class C: public B
{
   public:
   virtual void A::foo() {};
   virtual void B::foo() {};
};

Der compiler beschwert sich nur, wenn die Durchführung des B::foo() fehlt, aber man beschwert sich nicht über fehlende A::foo().

Alles in allem: ist dies ein Weg, um zu verbergen, rein virtuelle Methoden?

  • Wie genau hast du es verstecken?
  • Wenn ich nicht eine Implementierung für A::foo() in C, ich kann auch instanziieren ein Objekt von C. Also ist C immer instanziiert werden, auch wenn A::foo() fehlt. Also dachte ich, dass irgendwie A::foo() ist nicht erforderlich, in C, daher "versteckt".
  • Da B erbt A..
InformationsquelleAutor Juergen | 2013-03-24
Schreibe einen Kommentar