Bonjour,
Je suis en traine de developer une clase de base ( classe abstraite) pou heriter de ce classe deux classes types.
mon clase de base :
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
classe CBase
{
public :
void fct1();
void fct2();
protected :
void fct3();
void fct4() = 0 ;
CBase() // afin d'initialiser des membres privées.
private:
socket_TCP socket_ // socket juste pour dire que je definis une socket
} |
Jusqu'a la je n'ai pas de soucis tout va bien ; j'herite et je definis ma fonction fct4() qui differe d'une classe a l'autre.
Les deux fonctions public ( fct1 et fct2) utilise le membre privé socket_, jusqu'a la je n'ai pas de problemes.
Apres que j'ai developper une classe B qui herite de CBAse, je voulais heriter une deuxieme class C, et c'est la que j'ai vu que j'ai un probleme de conception :
Le classe B utilise un socket de type TCP (socket_TCP), alors que mon class C le type de scoket est SSL .
L'idée de faire de faire une classe de base et heriter parceque les deux classes B et C differe juste de la fonction virtuelle pure (fct4) , mais apres je me suis rendu comptes qu'il differe aussi de type de socket.
J'ai pensé a deux solutions :
1. De rendre mon class CBase template , dans ce cas mon classe CBase devient :
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
|
template <typename T>
classe CBase
{
public :
void fct1();
void fct2();
protected :
void fct3();
void fct4() = 0 ;
CBase() // afin d'initialiser des membres privées.
private:
T socket_ // socket juste pour dire que je definis une socket
}
//et puis :
class B : public CBase <socket_TCP>
{
.....
};
class C : public CBAse <socket_SSL>
{
.....
}; |
2. De changer completement le design, et de developper un seul class template et de specialiser la fonction fct4 (qui differe d'une classe a l'autre)
Pouriez vous m'indiquer si j'ai le bon resolution, si non quelles sont vos suggerations ?
Merci en avance
Partager