gagah1
Messages postés509Date d'inscriptionsamedi 28 juin 2003StatutMembreDernière intervention 3 août 2010
-
2 janv. 2005 à 16:53
xterminhate
Messages postés371Date d'inscriptiondimanche 4 janvier 2004StatutMembreDernière intervention23 septembre 2009
-
4 janv. 2005 à 09:02
Salut à tous!
Je voudrais avoir l'adresse mémoire d'une fonction membre d'une classe, alors que l'ISO C++ l'interdire l'accès.
Je m'explique:
J'ai une classe exemple:
class CXx
{
public:
.......
int fn(int);
.....
};
et j'ai une déclaration de fonction:
int (*fnglobal)(int);
et une classe
CXx classeX;
et quand je veux recuperer l'adresse :
fnglobal = &classeX.fn;
le compilateur m'envoie une erreur:
>>ISO C++ interdire l'accès de l'adresse mémoire d'une membre de la classe CXx.
Donc comment je fais pour avoir cette adresse mémoire? Merci!
plus_plus_fab
Messages postés232Date d'inscriptionvendredi 9 janvier 2004StatutMembreDernière intervention 8 janvier 2005 2 janv. 2005 à 18:01
C'est pas possible, le typage est trop fort !
Si ça l'était, tu pourrais parvenir à violer l'encapsulation.
Tu veux t'en servir pour l'appeler autrement que depuis un objet ?
Dans ce cas voir les adaptateurs de fonction membre (mem_fun, mem_fun_ref)
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 2 janv. 2005 à 18:25
Non seulement c'est déconseillé (il faut se rappeller qu'il s'agit de classe, et donc, la classe doit être instanciée pour pouvoir accèder à ses membres, et donc, les adresses sont toujours modifiées) mais c'est interdit !
Il vaux mieux passer par une fonction assistante de la classe, en dehors de celle-ci, qui puisse faire ce que tu veux. Tu peux par exemple lui passer un pointeur vers l'objet voulut...
_______________________________________
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 2 janv. 2005 à 20:51
Ce serait illogique de faire un truc comme ca, puisqu'il n'y aurait pas de this... ou alors ya un truc que j'ai pas compris
Comment appellerais tu fnglobal?
gagah1
Messages postés509Date d'inscriptionsamedi 28 juin 2003StatutMembreDernière intervention 3 août 2010 3 janv. 2005 à 22:20
Donc voici mon projet:
J'ai 8 classes et dans chaque classe il y a 2 fonctions membre nommée: int fn(int); et int test();
class Myclass1
{public:
int fn(int a) {return a*a;}
int test();
};
class Myclass2
{public:
int fn(int a){return a*2;}
int test();
};
...etc
et j'ai une declaration de fonction globale:
int (*fnglobal)(int);
maintenant j'essaie de faire un test à chaque classe pour savoir la valeur minimum entre les fonction test();
et je veux recuperer l'adresse memoire de la fonction int fn(int) de la fonction membre de la classe qui aura la valeur test minimum que je garderai dans fnglobal pour une utilisation ulterieur. Donc comment je vais faire? Merci.
xterminhate
Messages postés371Date d'inscriptiondimanche 4 janvier 2004StatutMembreDernière intervention23 septembre 2009 4 janv. 2005 à 09:02
Voila, tu fais une classe de base :
struct MyClasseInterface
{
virtual int test() = 0;
virtual int fn() = 0;
}
Et tu fais hériter publiquement toutes tes classes de MyClasseInterface. Ensuite tu peux manipuler des pointeurs MyClasseInterface* pour acceder aux instances et aux fonctions membres des classes dérivées....
Exemple :
MyClasse1 c1;
MyClasseInterface* pc = &c1;
int resultat_test = pc->test();
int resultat_fn = pc->fn(...);