Salut tout le monde !
Je suis en train d'étudier les DESIGN PATTERN ... vaste et complexe sujet.
Je rencontre des problèmes à l'implémentation de la "Fabrique Abstraite" et je souhaiterais avoir la confirmation que ce problème vient en fait du compilateur.
J'ai codé 3 classes abstraites :
* CFabriqueAbstraite
* CFenetreAbstraite
* CPorteAbstraite
et 6 classes dérivées :
* CFabriqueConcreteA
* CFabriqueConcreteB
* CFenetreConcreteA
* CFenetreConcreteB
* CPorteConcreteA
* CPorteConcreteB
Ma classe CFabriqueAbstraite contient un constructeur et un destructeur, ainsi que 2 fonctions virtuelles pures :
Dans la classe CFabriqueConcreteA je redéfinis ces deux fonctions come suit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 CFenetreAbstraite* CreerUneFenetre() = 0; CPorteAbstraite* CreerUnePorte() = 0;
Idem pour la classe CFabriqueConcreteB ... sauf que le A se transforme en B
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 CFenetreConcreteA* CreerUneFenetre() { return new CFenetreConcreteA; } CPorteConcreteA* CreerUnePorte() { return new CPorteConcreteA; }
Bref, quand je lance une compilation j'obtient le message suivant :
Je sais que les types de retour sont différents mais CPorteConcreteA dérive de CPorteAbstraite, alors pourquoi c'est pas possible de faire ça ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 error C2555: 'CFabriqueConcreteA::CreerUnePorte' : overriding virtual function differs from 'CFabriqueAbstraite::CreerUnePorte' only by return type or calling convention
Il me semble avoir entendu dire que le compilateur VC++ pouvait être la cause de cette erreur, c'est vrai ? Et comment résoudre mon problème ?
D'avance merci[/code]
Partager