Accès variable / Class

Guillaume - 14 sept. 2001 à 15:47
 Lu - 18 sept. 2001 à 10:48
Bonjour, je vous explique le contexte...
J'ai 2 classes :
class TMAC {
public:
void getVAR();
}

et :
class TCX {
public:
int iA;
TMAC macro;
}

Je crée une instance de TCX ...
cx = new TCX;

et pour appeler getVAR je fais naturellement:
cx->macro.getVAR() pas de probleme...

MAINTENANT MON PROBLEME :

quand je crée
TMAC::getVAR() je voudrais pouvoir acceder à iA (de TCX) en sachant que je 'utilise la classe TMAC que pour TCX et si je fais ca c uniquement pour la lisibilité ...(car en fait j'ai pleins d'autres trucs dans les classes et TMAC risque de reservir dans la suite de mon prog ... je sais pas encore)
Aidez moi SVP ...

5 réponses

-------------------------------
Réponse au message : Tes déclarations sont un peu bizarres. En règle générale on déclare private les membres de données ( tels iA et ce même si on s'en sert ailleurs ) et public les fonctions ( telles getVAR(). Je te suggère de déclarer friend la fonction getVAR(). Grosso modo, les fonctions friend ont la capacité d'accéder aux membres private d'une classe.
Pour le code ça devrait être qqch comme ça:

class TMAC {
public:
... ... ... // les fonctions de TMAC sans rapport avec TCX
private:
... ... ... // les données de TMAC ( si il y en a ! )
}

class TCX {
friend int getVAR() { return iA ; } // Renvoie iA de l'objet TCX considéré
public:
... ... // les fonctions de TCX
private:
... ... // les données de TCX
}
Je n'ai pas encore essayé le code parce que je ne sais pas exactement où tu veux en venir. Si ça ne marche toujours pas, poursuis la discussion ( enfin pas trop parce que je suis débutant en POO :)

GoldenEye
-------------------------------

Bonjour, je vous explique le contexte...
J'ai 2 classes :
class TMAC {
public:
void getVAR();
}

et :
class TCX {
public:
int iA;
TMAC macro;
}

Je crée une instance de TCX ...
cx = new TCX;

et pour appeler getVAR je fais naturellement:
cx->macro.getVAR() pas de probleme...

MAINTENANT MON PROBLEME :

quand je crée
TMAC::getVAR() je voudrais pouvoir acceder à iA (de TCX) en sachant que je 'utilise la classe TMAC que pour TCX et si je fais ca c uniquement pour la lisibilité ...(car en fait j'ai pleins d'autres trucs dans les classes et TMAC risque de reservir dans la suite de mon prog ... je sais pas encore)
Aidez moi SVP ...

:) :)
0
-------------------------------
Réponse au message :
-------------------------------
oui mais non c pas ca que je veux ...

Je veux dans getVAR() (qui est d'ailleurs declaré dans TMAC) pouvoir faire par exemple printf("%d",iA); (où iA est déclaré dans TCX)

Sinon mes déclarations sont bonnes, je veux pouvoir accéder à iA de l'exterieur ...

-------------------------------
Réponse au message : Tes déclarations sont un peu bizarres. En règle générale on déclare private les membres de données ( tels iA et ce même si on s'en sert ailleurs ) et public les fonctions ( telles getVAR(). Je te suggère de déclarer friend la fonction getVAR(). Grosso modo, les fonctions friend ont la capacité d'accéder aux membres private d'une classe.
Pour le code ça devrait être qqch comme ça:

class TMAC {
public:
... ... ... // les fonctions de TMAC sans rapport avec TCX
private:
... ... ... // les données de TMAC ( si il y en a ! )
}

class TCX {
friend int getVAR() { return iA ; } // Renvoie iA de l'objet TCX considéré
public:
... ... // les fonctions de TCX
private:
... ... // les données de TCX
}
Je n'ai pas encore essayé le code parce que je ne sais pas exactement où tu veux en venir. Si ça ne marche toujours pas, poursuis la discussion ( enfin pas trop parce que je suis débutant en POO :)

GoldenEye
-------------------------------

Bonjour, je vous explique le contexte...
J'ai 2 classes :
class TMAC {
public:
void getVAR();
}

et :
class TCX {
public:
int iA;
TMAC macro;
}

Je crée une instance de TCX ...
cx = new TCX;

et pour appeler getVAR je fais naturellement:
cx->macro.getVAR() pas de probleme...

MAINTENANT MON PROBLEME :

quand je crée
TMAC::getVAR() je voudrais pouvoir acceder à iA (de TCX) en sachant que je 'utilise la classe TMAC que pour TCX et si je fais ca c uniquement pour la lisibilité ...(car en fait j'ai pleins d'autres trucs dans les classes et TMAC risque de reservir dans la suite de mon prog ... je sais pas encore)
Aidez moi SVP ...

:) :)
0
-------------------------------
Réponse au message : OK , je n'avais pas compris ce que tu voulais... Par contre là je ne vois pas vraiment. Je vais essayer de creuser GoldenEye

:blush)
-------------------------------
0
esc je rêve ou bien je vous vois oublier les points-virgules apres l'} fermente de la classe??

class TMAC {
public:

private:
... ... ...
} ; // <=== ce pt1 de ;

soit g fumé qqch et le ; n'est pa nécessaire, soit c'est un oubli que vous avez fait, soit le compilateur que vous utilisez est très coopératif et s'adapte a ce style d'écriture ;-) nan séieusement je me trompe??
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Ton problème provient probablement d'une mauvaise conception des tes classes.

Les cas où deux classes ont besoin de se connaître mutuellement ne sont pa ss courants.

Malgré tout, si tu y tiens vraiment :
- si ta relation entre une instance de chacune des deux classes est une relation forte, tu peux définir par exemple l'attribut de TMAX : TCX & TMAX::m_tcx
- si la relation n'existe pas forcément, tu peux éventuellement faire pareil mais avec un pointeur au lieu d'une référence
- en général, le problème que tu me décrit provient d'une mauvaise vision des dépendances ; dans ton cas, pourquoi ne pas passer TCX en pramètre de TMAX::getVar() ? C'est souvent un tort d'avoir peur d'ajouter des paramètres car on risque de se retrouver avec des tas d'attributs qui ne servent qu'à éviter de répéter des paramètres, et qui rendent la classe confuse, mal définie, difficilement utilisable et pleine de bugs.
0
Rejoignez-nous