1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
class Conteneur;
class Objet
{
private:
// il est intéressant de garder une référence sur le conteneur parent;)
Conteneur* m_parent;
bool visible; //surtout utile pour les conteneurs... mais bon
(autres informations utiles aux objets)
public:
Objet(Conteneur* parent):m_parent(parent){}
~Objet(){/* ne s'occupe que de SES propres membres ;) */}
bool IsVisible()const{return visible;}
void Open(){visible=true;}
vois Close(){visible=false;}
};
class Conteneur:public Objet
{
private:
std::vector<Objet*> m_enfants;
bool m_visible; // appartient en fait à la classe Objet ;)
public:
/* il me semble intéressantde
Conteneur(Conteneur* parent):Objet(parent){}
~Conteneur()
{
/* pour détruire le contenu du conteneur ;) */
Close();
}
void Close()
{
/*ferme le conteneur, détruit ce qu'il contient, mais ne le détruit
pas*/
Objet::Close();
for(unsigned int i=0;i<m_enfants.size(); i++)
delete m_enfants[i];
m_enfants.clear();
}
void Open()
{
//c'est ici que les objets sont créés ;)
}
void Remove(int ind)
{
//retire l'objet du tableau, sans le détruire
//considère que tu as déjà récupéré l'objet en question ;)
m_enfants.erase(m_enfants.begin()+ind);
}
//variante
void Remove(Objet* obj)
{
int i=0;
while(i<m_enfants.size() && m_enfants[i]!=obj)
i++;
Remove(i);
}
//ajoute un objet au tableau (index facultatif: l'ajout se fait alors à la
// fin du tableau)
void Add(Objet* obj,int ind=-1)
{
if(ind==-1)
m_enfants.push_back(obj);
else
{
m_enfants.insert(m_enfants.begin()+ind,obj);
}
}
} |