Les méthodes virtuelles pures dans dérivée de la classe abstraite

Dire que nous avons ceci:

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

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

Le compilateur renvoie pas d'erreur, je suppose que c'est parce que B est aussi une classe abstraite et en tant que tel, il n'a pas à mettre en œuvre foo d'A.
Mais en quoi une telle construction signifie?

1) Ne foo de B cacher foo?

2) La première classe qui hérite de B et n'est pas une classe abstraite, il faut fournir deux implémentations comme:

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

Le compilateur ne se plaint si la mise en œuvre de B::foo() est manquant, mais il n'a pas à se plaindre d'un manque A::foo().

Dans l'ensemble: est-ce une façon de masquer les méthodes virtuelles pures?

Exactement comment avez-vous cacher?
Si je n'ai pas de fournir une implémentation pour A::foo() en C, je peux aussi instancier un objet de C. Donc C peut toujours être instancié, même lorsque A::foo() est manquant. Alors j'ai pensé que quelque part A::foo() n'est pas nécessaire dans C, donc "caché".
Parce que B hérite d'Une..

OriginalL'auteur Juergen | 2013-03-24