Quelles sont les différences entre le remplacement des fonctions virtuelles et le masquage de non-fonctions virtuelles?

Donné le fragment de code suivant, quelles sont les différences dans les appels de fonction? Qu'est-ce que la fonction de masquage? Qu'est-ce que la fonction primordiale? Comment ils se rapportent à la fonction de surcharges? Quelle est la différence entre les deux? Je ne pouvais pas trouver une bonne description de ces documents en un seul endroit, donc je pose la question ici afin que je puisse consolider les informations.

class Parent {
  public:
    void doA() { cout << "doA in Parent" << endl; }
    virtual void doB() { cout << "doB in Parent" << endl; }
};

class Child : public Parent {
  public:
    void doA() { cout << "doA in Child" << endl; }
    void doB() { cout << "doB in Child" << endl; }
};

Parent* p1 = new Parent();
Parent* p2 = new Child();
Child* cp = new Child();

void testStuff() {
  p1->doA();
  p2->doA();
  cp->doA();

  p1->doB();
  p2->doB();
  cp->doB();
}
Comment pouvez-vous pas trouver une bonne description? Ce qui est couvert dans toute base de C++ manuel. (Et avec un accès public pour les fonctions de membre.)
Ce sent comme un devoir à la maison ou quelque chose comme ça. Je ne sais pas pourquoi que vous souhaitez poser une question qui est si largement couverts.
Je ne peux pas trouver une explication en ligne (qui est l'endroit où j'ai l'habitude de regarder, et d'autres sans doute aussi) que compare ces. Ils ont des explications de l'un ou de l'autre, mais pas les deux, et je voulais mettre quelque chose en ligne qui serait facile de référence. Merci pour les captures sur les spécificateurs d'accès.
Non, c'est juste quelque chose que j'ai trouvé. Les explications que j'ai trouvé expliquer l'un ou l'autre, mais ne pas donner une comparaison, et c'est ce que je suis en train de.
FWIW, je m'apprêtais à poster cette même question, et non, ce n'est pas pour un devoir à la maison. Je suis longtemps hors de l'université. Merci de poser cette Jed, bien que malheureusement je ne comprends toujours pas ce que le mot clé virtual est pour, sauf si vous essayez de faire une classe de base abstraite avec des fonctions virtuelles pures. En dehors de cela, je ne vois pas ce "virtuel" d'un point de vue pratique, car je peux juste masquer la fonction.

OriginalL'auteur Jed Schaaf | 2013-11-01