Bonsoir les geeks,
J’ai des connaissances restreintes en C++, et ça fait un moment que je sèche. Vu qu’il doit y avoir quelques pros dans le coin, je me suis dit qu’une âme charitable aurait peut-être une solution toute simple.
Voilà mon problème: j’ai une hiérarchie de classes, une première classe person, et une classe qui en dérive, nommée employee, chacune avec un membre private accessible en lecture/écriture via des méthodes Get/Set, tout ce qu’il y a de plus banal. En parallèle, et c’est pourquoi j’ai intitulé le sujet “jumelage de classes”, je souhaiterais créer des classes de conteneurs (ici des vector de la STL) pour stocker des objets de ces deux types. Et, là aussi, je souhaiterais que la classe de conteneurs pour les objets employee dérive de la classe de conteneurs des objets person, ceci afin de ne pas avoir à réécrire une méthode qui est commune aux deux conteneurs (en l’occurence, la méthode ClearAllAges()). Seule contrainte que je fixe: pas de template.
Hop, le code du header:
[code]#include <vector.h>
//Deux classes, dont l’une dérive de l’autre
class person{
public:
int Age(void) {return _age;}
void SetAge(int value) {_age = value;}
private:
int _age;
};
class employee : public person{
public:
int ID(void) {return _ID;}
void SetID(int value) {_ID = value;}
private:
int _ID;
};
//Les classes de conteneurs correspondantes. Je souhaiterais que, là aussi, la deuxième
//soit dérivée de la première, afin de ne pas avoir à réécrire la méthode ClearAllAges
//qui est en fait commune.
class persons : public vector{
public:
int ClearAllAges(void){
for(int i=0; i < this->size(); i++)
this->operator.SetAge(0);
}
};
class employees : public vector{
public:
int ClearAllAges(void){ //<---- comment éviter ce doublon?
for(int i=0; i < this->size(); i++)
this->operator.SetAge(0);
}
int ClearAllIDs(void){
for(int i=0; i < this->size(); i++)
this->operator.SetID(0);
}
};[/code]
Le code ci-dessus fonctionne, mais au prix d’un doublon, dû au fait que les deux classes sont dérivées de vector. Mon but serait donc de dériver employees de persons, plutôt que de vector, afin d’économiser la méthode employees::ClearAllAges(). Comment dois-je m’y prendre? Ou est-ce tout simplement impossible?
Merci d’avance à tous ceux qui m’apporteront leurs précieux conseils!