tranformer une fonction private en public

tranformer une fonction private en public - C++ - Programmation

Marsh Posté le 30-03-2010 à 17:07:23    

Salut à tous,
 
J'ai une classe Maman qui ressemble à ça :  
 

Code :
  1. class Maman
  2. {
  3. public:
  4. /*trucs ininterresant*/
  5. private:
  6. /*trucs ininteressants*/
  7. void MaFonction(void);
  8. }


 
MaFonction agit sur des données privées uniquement. Le mec qui a développé cette classe ne pensait pas que cette fonction puisse un jour être appellée d'où le private. Seulement voilà, depuis j'ai définie une classe Fifille:
 

Code :
  1. class Fifille : public Maman
  2. {
  3. /*pleins de trucs*/
  4. }


 
Et je suis dans le cas non prévu où je dois pouvoir appellé MaFonction directement.
J'ai pensé à faire ça:

Code :
  1. class Fifille : public Maman
  2. {
  3. void MaFonctionRusee(void){Maman::MaFonction();};
  4. }


Mais bien sûr le compilateur n'est pas dupe. Comment puis-je faire pour contourner cet insoluble problème?

Reply

Marsh Posté le 30-03-2010 à 17:07:23   

Reply

Marsh Posté le 30-03-2010 à 17:14:31    

Sans modifier Maman, tu ne peux rien faire.  


---------------
The truth is rarely pure and never simple (Oscar Wilde)
Reply

Marsh Posté le 30-03-2010 à 17:18:46    

Ce n'est pas cool.

Reply

Marsh Posté le 30-03-2010 à 17:26:39    

C'est un peu le principe de private.  (Outre mettre ce que tu veux utiliser public, tu peux mettre l'utilisateur friend, mais il faut aussi modifier Maman).


---------------
The truth is rarely pure and never simple (Oscar Wilde)
Reply

Marsh Posté le 30-03-2010 à 17:38:54    

Code :
  1. #define private public


De rien :sol:  
 
Edit : et plus sérieusement, c'est quoi le problème que tu as, pour ne pas vouloir modifier la classe mère ?


Message édité par theshockwave le 30-03-2010 à 17:40:18

---------------
last.fm
Reply

Marsh Posté le 30-03-2010 à 17:44:14    

Comportement indefini des que tu inclus un entête standard avec ce define.


---------------
The truth is rarely pure and never simple (Oscar Wilde)
Reply

Marsh Posté le 30-03-2010 à 17:48:24    

lance un mandat d'arrêt international contre ce dévelopeur

Reply

Marsh Posté le 30-03-2010 à 17:51:03    

Un Programmeur a écrit :

Comportement indefini des que tu inclus un entête standard avec ce define.


 
oui, enfin, c'était pas sérieux hein [:pingouino]  


---------------
last.fm
Reply

Marsh Posté le 30-03-2010 à 17:51:52    

sodobangravierpelleàclous

 

Quand on a un doute, on met en protected, pas en private. Bref, faut modifier "Maman". Si tu as le code, passe juste la fonction en protected, et tu devrais faire ce que tu souhaites avec un minimum d'impact sur la classe mère.


Message édité par Elmoricq le 30-03-2010 à 17:52:22
Reply

Marsh Posté le 30-03-2010 à 17:56:05    

Vous partez tous du principe que j'ai les sources, c'est émouvant.

Reply

Marsh Posté le 30-03-2010 à 17:56:05   

Reply

Marsh Posté le 30-03-2010 à 18:00:03    

snafu8 a écrit :

Vous partez tous du principe que j'ai les sources, c'est émouvant.


 
Si tu n'as pas les sources, alors tu ne peux pas être sur que cette fonction n'a pas d'effets de bords indésirables.


---------------
last.fm
Reply

Marsh Posté le 30-03-2010 à 18:00:16    

snafu8 a écrit :

Vous partez tous du principe que j'ai les sources, c'est émouvant.

 

[:ddr555]


Message édité par Elmoricq le 30-03-2010 à 18:00:27
Reply

Marsh Posté le 30-03-2010 à 18:04:49    

snafu8 a écrit :

Vous partez tous du principe que j'ai les sources, c'est émouvant.


 
Non.  "Tu modifies Maman" étais un raccourci pour "tu introduis une demande de modification de Maman en bonne et due forme suivant le process employé pour ce faire dans le cas de la bibliothèque contenant Maman."  Si ce process consiste a sacrifier des chèvres suivant un rite vaudou, tu trouves des chèvres blanches et tu les amènes au sorcier compétant.  


---------------
The truth is rarely pure and never simple (Oscar Wilde)
Reply

Marsh Posté le 30-03-2010 à 18:08:51    

Citation :

Si tu n'as pas les sources, alors tu ne peux pas être sur que cette fonction n'a pas d'effets de bords indésirables.


 
Je suis physicien à la base, donc pour moi, si tout se passe bien sur 5 exemples, alors tout se passera toujours bien.

Reply

Marsh Posté le 30-03-2010 à 18:14:31    

snafu8 a écrit :

Citation :

Si tu n'as pas les sources, alors tu ne peux pas être sur que cette fonction n'a pas d'effets de bords indésirables.


 
Je suis physicien à la base, donc pour moi, si tout se passe bien sur 5 exemples, alors tout se passera toujours bien.


 
Oh, en informatique, un seul exemple suffit. Si et seulement si il couvre tous les cas possibles. :o

Reply

Marsh Posté le 30-03-2010 à 19:21:43    

snafu8 a écrit :

Citation :

Si tu n'as pas les sources, alors tu ne peux pas être sur que cette fonction n'a pas d'effets de bords indésirables.


 
Je suis physicien à la base, donc pour moi, si tout se passe bien sur 5 exemples, alors tout se passera toujours bien.


 
La loi de Murphy n'est pas valide pour les physiciens?


---------------
The truth is rarely pure and never simple (Oscar Wilde)
Reply

Sujets relatifs:

Leave a Replay

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