Question

Est-il possible d'accéder aux membres privés d'une classe en C ++.

  

à condition que vous ne disposez pas d'un ami   fonction et vous n'avez pas accès à   la définition de classe

Était-ce utile?

La solution

Vous voulez dire en utilisant un peu d'arithmétique de pointeur pour obtenir l'accès? Il est possible, mais est certainement dangereux. Jetez un oeil à cette question aussi: Accès privé membres

Autres conseils

Je pense qu'il y avait un vieux truc de l'école comme ceci:

#define private public
#include "header.h"
#define private private

Mais vous êtes fortement déconseillé de le faire (je l'ai lu rapidement que quelque chose dit à ce sujet dans la norme C ++) - si vous voulez en savoir plus sur ce google pour « public-privé #define »

Eh bien, je pourrais parler rubish, mais je pense que vous pourriez essayer de définir une classe « double » avec les mêmes membres que la classe que vous souhaitez modifier, mais différents modificateurs publics / privés et ensuite utiliser reintepret_cast pour lancer la classe d'origine à la vôtre dans lequel vous pouvez accéder aux membres privés.

Il est un peu hacky; -)

Un peu de code pour expliquer l'idée:

class ClassWithNoAccess 
{
public:
  someMethod();

private:
  int someVar;
};

class ClassTwin 
{
public:
  someMethod();

public:
  int someVar;
}

et quelque part dans le code:

ClassWithNoAccess* noAccess = new ClassWithNoAccess();
ClassTwin* twin = reinterpret_cast<ClassTwin *>(noAccess);
twin->someVar = 1;

edit: si quelqu'un comme déjà écrit auparavant, cela pourrait fonctionner, mais la norme ne garantit pas l'ordre des variables avec modificateur public et privé sera le même

Même s'il était possible grâce à une bidouille méchante - voir les messages précédents - vous devriez pas le faire.

Encapsulation existe pour une très bonne fin, et membre de la classe de réglage comme des moyens privés que le promoteur n'a pas l'intention de quelqu'un mess avec ce membre. Cela devrait signifier

« Vous ne devez pas accéder à ce membre pour pouvoir utiliser l'interface publique à sa pleine mesure prévue »

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top