Bonjour,
ce code :
permet l'appel de la fonction "DoSomeThing" sur deux classes dérivées de la classe de base, à partir d'un pointeur sur la classe de base.Code:#include <iostream> using namespace std ; class Base { public: virtual void DoSomeThing(void) {cout << "accès interdit"; } void DoSomeThingElse(void) { cout << "OK de la classe de base \n"; } }; class Derived_1 : public Base { public: virtual void DoSomeThing(void) { cout << "OK de la classe dérivée 1 \n"; } }; class Derived_2 : public Base { public: virtual void DoSomeThing(void) { cout << "OK de la classe dérivée 2 \n"; } }; int main(void) { Base *B1 = new Derived_1; B1->DoSomeThing(); Base *B2 = new Derived_2; B2->DoSomeThing(); Base *B3 = new Base(); B3->DoSomeThingElse(); // <== ceci empêche de déclarer une virtuelle pure dans la classe de base Base *B4 = new Base(); B4->DoSomeThing(); //<=== comment interdire ceci à la compilation ? }
Je souhaite interdire l'accès à la fonction "DoSomeThing" depuis la classe de Base. Je le fais au runtime, comme le montre le code joint. Est-il possible d'interdire cet appel à la compilation ?
NB : il est impossible de passer par "DoSomeThing() = 0" car ceci interdirait l'instanciation de la classe de Base...
merci pour toute suggestion...
-----