2010-09-24 4 views

Répondre

0
  1. La fonction virtuelle a un corps de fonction.

  2. Surchargé peut être effectué par la fonction Vartual.

  3. Il est défini comme: Virtual int runFun();

tout

  1. Fonction pure Vartual ont sur le corps de la fonction.

  2. Surchargé est must en fonction Pure Vartual.

  3. Il est défini comme: Virtual int runFun() = 0;

2

une fonction virtuelle pure est celle qui est déclarée comme ceci:

class Foo { 
    virtual void bar() = 0; 
}; 

bar est un élément virtuel pur de Foo. Il n'a pas d'implémentation (donc = 0), et ne peut pas être appelé. Toute classe qui hérite de Foodoit fournir une implémentation pour bar. C'est la seule différence: la classe parente n'a pas d'implémentation pour le virtuel pur, donc les classes dérivées doivent le fournir. (Il existe une exception à cela, mais il est rarement utilisé.)

Sinon, cela fonctionne exactement de la même manière. Étant donné:

class Baz : public Foo { 
    virtual void bar() {} 
}; 

Toute instance de Baz est accessible avec un pointeur de type Foo* et Baz::bar sera appelée. Si Foo::bar est purement virtuel, alors Foo ne peut pas être instancié et les appels au Foo::bar seront des erreurs. Si Foo::bar est pas pur, puis la mise en œuvre prévue Foo::bar sera appelé pour les instances de Foo et Baz::bar seront appelés pour les instances de Baz, même si elle est à travers un Foo*.

(virtuals pures peuvent aussi avoir des mises en œuvre de telle sorte que, par exemple, Baz::bar peut appeler Foo::bar, mais cela est rare.)

Questions connexes