Appeler methode surchargée sans virtual

Appeler methode surchargée sans virtual - C++ - Programmation

Marsh Posté le 28-11-2017 à 18:50:08    

Hello à tous,
Soit l'exemple suivant :

 
Code :
  1. class A
  2. {
  3. public:
  4.   void caller()
  5.   {
  6.     foo();
  7.   }
  8. protected:
  9.   void foo()
  10.   {
  11.     std::cout << "A::foo" << std::endl;
  12.   }
  13. };
  14. class B : public A
  15. {
  16. public:
  17.   void foo()
  18.   {
  19.     std::cout << "B::foo" << std::endl;
  20.   }
  21. };
  22. int _tmain(int argc, _TCHAR* argv[])
  23. {
  24.   A a;
  25.   B b;
  26.   a.caller();
  27.   b.caller();
  28. return 0;
  29. }
 

Comment faire pour que "b.caller();" retourne "B::foo" SANS toucher à la class A et sans reecrire "caller" dans B ?


Message édité par azubal le 28-11-2017 à 18:51:41
Reply

Marsh Posté le 28-11-2017 à 18:50:08   

Reply

Marsh Posté le 28-11-2017 à 23:01:53    

Code :
  1. #define caller foo
  2. b.caller();
  3. #undef caller


 :whistle:

 

En vrai je pense pas que ce soit possible étant donné l'exemple, sauf biensûr si foo est une méthode virtuelle (mais dans ce cas tu poserais pas la question j'imagine :D)

 

Pourquoi vouloir ce comportement ?

 

edit : Ok j'avais pas lu le titre :o


Message édité par Terminapor le 28-11-2017 à 23:29:05

---------------
Perhaps you don't deserve to breathe
Reply

Marsh Posté le 29-11-2017 à 07:29:36    

Ahahah  :D  
 
La class A fait partie d'une bibliothèque importée en dehors du projet et je n'ai pas envie de dire a mon client de la patcher car je suis sur qu'il va oublier.
Je n'ai pas envie non plus d'importer la class completement dans le scope du projet pour ne pas l'alourdir inutilement.
Mais bon. Jai pas vraiment le choix au final  [:vizera]

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed