iterateur et encapsulation
Bonjour à tous,
J'ai une classe Individu et une classe Menage. Un ménage est composé de plusieurs individus. Je stocke donc dans ma classe ménage un vecteur d'adresses d'individus. Je voudrais pouvoir itérer sur ce vecteur sans que l'utilisateur de ma classe puisse modifier directement mon vecteur mais il faudrait qu'il puisse appeler les fonctions membre de la classe Individu. Voici mon code actuel:
Classe Individu:
Code:
1 2 3 4 5 6 7 8
|
class Individu
{
private:
string _strName;
public:
void setName(const string& name) { _strName = name; }
}; |
La classe Menage:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
typedef vector<Individu*>::iterator iteratorIndiv;
class Menage
{
private:
vector<Individu*> _vctIndiv;
public:
iteratorIndiv begin() { return _vctIndiv.begin(); }
void ajouterIndiv (Individu& ind) { _vctIndiv.push_back(&ind); }
}; |
Donc en résumé, je voudrais que l'on ne puisse pas faire un truc du genre:
Code:
1 2 3 4 5
|
Individu ind1, ind2;
Menage m;
m.ajouterIndiv (ind1);
*(m.begin()) = &ind2; //pas possible |
mais que l'on puisse faire
Code:
1 2 3 4 5
|
Individu ind1;
Menage m;
m.ajouterIndiv (ind1);
(*(m.begin()))->setName("toto"); //possible de modifier les éléments du vecteur |
C'est sans doute tout bête mais là je coince...