J'ai un certain nombre de classes imbriquées dans un modèle mathématique.
Tout marche mais tout est public.
Je voudrais maintenant encapsuler ça correctement.
C'est sans doute très simple. Supposons une classe comme suit:
class Class1
{
private:
Class2 * class2obj;
}
Quelle est la façon la plus appropriée, la plus efficace, d'écrire
l'interface d'accès à class2obj ?
Est ce qu'ajouter par exemple comme membre public:
Class2 * GetClass2Arr() {return class2obj;};
et/ou
Class2 GetClass2Elt(int inx) const {return class2obj[inx];};
semble une solution possible? (je ne pense pas...)
Ce qui te garanti que l'objet renvoyé ne pourra pas être modifié. Par ailleurs, essaye d'utiliser les std::vector.
Keon
bv wrote:
Bonjour,
J'ai un certain nombre de classes imbriquées dans un modèle mathématique. Tout marche mais tout est public. Je voudrais maintenant encapsuler ça correctement.
C'est sans doute très simple. Supposons une classe comme suit:
class Class1 { private: Class2 * class2obj; }
Quelle est la façon la plus appropriée, la plus efficace, d'écrire l'interface d'accès à class2obj ?
Est ce qu'ajouter par exemple comme membre public: Class2 * GetClass2Arr() {return class2obj;}; et/ou Class2 GetClass2Elt(int inx) const {return class2obj[inx];};
semble une solution possible? (je ne pense pas...)
D'avance merci bv
Tu dois écrire une fonction membre publique dans la classe un qui prenne aussi les argument
class Class2 { private :
int * obj = new int;
public :
void fct (int a) { obj = a; }
};
class Class1 { private :
Class2 class2obj;
public :
void fctClass1(); };
void fctClass1(int n) : void fct(n) {
}
main() { int N; N=5; Class1 test1; test1.fctClass1(N); }
bv wrote:
Bonjour,
J'ai un certain nombre de classes imbriquées dans un modèle
mathématique. Tout marche mais tout est public.
Je voudrais maintenant encapsuler ça correctement.
C'est sans doute très simple. Supposons une classe comme suit:
class Class1
{
private:
Class2 * class2obj;
}
Quelle est la façon la plus appropriée, la plus efficace, d'écrire
l'interface d'accès à class2obj ?
Est ce qu'ajouter par exemple comme membre public:
Class2 * GetClass2Arr() {return class2obj;};
et/ou
Class2 GetClass2Elt(int inx) const {return class2obj[inx];};
semble une solution possible? (je ne pense pas...)
D'avance merci
bv
Tu dois écrire une fonction membre publique dans la classe un qui prenne
aussi les argument
class Class2
{
private :
int * obj = new int;
public :
void fct (int a)
{
obj = a;
}
};
class Class1
{
private :
Class2 class2obj;
public :
void fctClass1();
};
void fctClass1(int n) : void fct(n)
{
}
main()
{
int N;
N=5;
Class1 test1;
test1.fctClass1(N);
}
J'ai un certain nombre de classes imbriquées dans un modèle mathématique. Tout marche mais tout est public. Je voudrais maintenant encapsuler ça correctement.
C'est sans doute très simple. Supposons une classe comme suit:
class Class1 { private: Class2 * class2obj; }
Quelle est la façon la plus appropriée, la plus efficace, d'écrire l'interface d'accès à class2obj ?
Est ce qu'ajouter par exemple comme membre public: Class2 * GetClass2Arr() {return class2obj;}; et/ou Class2 GetClass2Elt(int inx) const {return class2obj[inx];};
semble une solution possible? (je ne pense pas...)
D'avance merci bv
Tu dois écrire une fonction membre publique dans la classe un qui prenne aussi les argument
class Class2 { private :
int * obj = new int;
public :
void fct (int a) { obj = a; }
};
class Class1 { private :
Class2 class2obj;
public :
void fctClass1(); };
void fctClass1(int n) : void fct(n) {
}
main() { int N; N=5; Class1 test1; test1.fctClass1(N); }
Fabien LE LEZ
On Thu, 23 Oct 2003 00:53:05 -0400, "bv" wrote:
class Class1 { private: Class2 * class2obj; }
Quelle est la façon la plus appropriée, la plus efficace, d'écrire l'interface d'accès à class2obj ?
Maintenant, le problème c'est que tu as un pointeur, donc j'imagine que tu alloues de la mémoire dans le constructeur et tu la libères dans le destructeur. Si, pour une raison ou pour une autre, tu ne peux pas utiliser un conteneur (std::vector<> par exemple), je te conseille fortement de laisser comme seule responsabilité à la classe Class1 de gérer l'allocation et la désallocation. Elle sera sans doute contenue dans une autre classe, accessible par l'utilisateur, et à l'interface plus riche.
-- ;-)
On Thu, 23 Oct 2003 00:53:05 -0400, "bv" <voisin.bruno@wanadoo.fr>
wrote:
class Class1
{
private:
Class2 * class2obj;
}
Quelle est la façon la plus appropriée, la plus efficace, d'écrire
l'interface d'accès à class2obj ?
Maintenant, le problème c'est que tu as un pointeur, donc j'imagine
que tu alloues de la mémoire dans le constructeur et tu la libères
dans le destructeur.
Si, pour une raison ou pour une autre, tu ne peux pas utiliser un
conteneur (std::vector<> par exemple), je te conseille fortement de
laisser comme seule responsabilité à la classe Class1 de gérer
l'allocation et la désallocation. Elle sera sans doute contenue dans
une autre classe, accessible par l'utilisateur, et à l'interface plus
riche.
Maintenant, le problème c'est que tu as un pointeur, donc j'imagine que tu alloues de la mémoire dans le constructeur et tu la libères dans le destructeur. Si, pour une raison ou pour une autre, tu ne peux pas utiliser un conteneur (std::vector<> par exemple), je te conseille fortement de laisser comme seule responsabilité à la classe Class1 de gérer l'allocation et la désallocation. Elle sera sans doute contenue dans une autre classe, accessible par l'utilisateur, et à l'interface plus riche.