Bonjour !
Voila, j'aimerais savoir s'il est possible d'implémenter une fonction abstraite =0 en de façon qu'une classe dérivée ne puisse pas l'overrider.

Plus précisément, voici une Interface, et une classe A implémentant sa fonction :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
class Interface
{
public:
        virtual void Foo() = 0;
};

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
class Abstraite
{
public:
        void Foo() 
        { 
                // Do things...
                Bar();
        }
 
        /** Cette fonction la est à implémenter par la classe dérivée **/
        virtual void Bar() = 0;
};
Maintenant supposons qu'une classe Concrete redéfinisse Foo()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
class Concrete
{
public:
        void Foo() 
        { 
            // Do other things...
        }
 
        void Bar() {}
};
Je me demande s'il est possible de se débrouiller pour que, quand j'appelle Foo() sur un pointeur de mon Interface, ce soit Abstraite::Foo() qui soit appelée et pas Concrete::Foo().
Autrement dit, qu'il soit impossible pour une classe dérivée de Abstraite d'overrider Foo(), malgré qu'elle soit virtuelle.

Merci d'avance