Comment appeler la définition de fonction virtuelle de la classe de base ayant des définitions à la fois dans la classe de base abstraite et dans la classe dérivée en C ++?

Nous ne pouvons pas créer un object d’une classe abstraite, non? Alors, comment puis-je appeler une fonction virtuelle qui a une définition à la fois dans la classe de base abstraite et dans la classe dérivée? Je souhaite exécuter le code dans une classe de base abstraite, mais j’utilise actuellement l’object de la classe dérivée.

class T { public: virtual int f1()=0; virtual int f2() { a = 5; return a } } class DT : public T { public: int f1() { return 10; } int f2() { return 4; } } int main() { T *t; t = new DT(); ............ } 

Est-il possible d’appeler la fonction de classe de base à l’aide de l’object t? Si ce n’est pas possible, que dois-je faire pour appeler la fonction de classe de base?

Comme vous le feriez avec n’importe quelle autre implémentation de classe de base: utilisez une qualification explicite pour contourner le mécanisme de répartition dynamic.

 struct AbstractBase { virtual void abstract() = 0; virtual bool concrete() { return false; } }; struct Derived : AbstractBase { void abstract() override {} bool concrete() override { return true; } }; int main() { // Use through object: Derived d; bool b = d.AbstractBase::concrete(); assert(!b); // Use through pointer: AbstractBase *a = new Derived(); b = a->AbstractBase::concrete(); assert(!b); } 

Vous pouvez spécifier explicitement la scope de la classe lors de l’appel de la fonction:

  class A { /* Abstract class */ }; class B : public A {} B b; bA::foo(); 

Si la classe de base abstraite a du code, appelez simplement BaseClassName :: AbstractFunction ()

 class Base { virtual void Function() {} } class Derived : Base { virtual void Function() { Base::Function(); } }