Problème de polymorphisme : retour d'une classe abstraite
Bonjour à vous,
Je débute assez en programmation et j'ai un problème sur mon projet, je pense qu'une notion m'échappe, voici mon problème :
Ma classe de base et ses deux dérivées (simplifiées légèrement pour l'occasion (suppression de données membres))
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
class NonLinearModel
{
virtual void UseModel(const VectorXd& V_nl, VectorXd& I_nl, MatrixXd& J_nl) = 0;
};
class LookUpModel : public NonLinearModel
{
virtual void UseModel(const VectorXd& V_nl, VectorXd& I_nl, MatrixXd& J_nl) = 0;
};
struct MathModel : public NonLinearModel
{
virtual void UseModel(const VectorXd& V_nl, VectorXd& I_nl, MatrixXd& J_nl) = 0;
virtual LookUpModel BuildLookUpModel() = 0;
}; |
De ces classes abstraites je dérive mes modèles concrets comme par exemple :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
class Diode_MathModel : public MathModel
{
public:
Diode_MathModel(DiodeModelType ModelType);
~Diode_MathModel(){}
void UseModel(const VectorXd& V_nl, VectorXd& I_nl, MatrixXd& J_nl);
LookUpModel BuildLookUpModel();
};
class Diode_LookUpModel : public LookUpModel
{
public:
Diode_LookUpModel(DiodeModelType ModelType);
~Diode_LookUpModel(){}
void UseModel(const VectorXd& V_nl, VectorXd& I_nl, MatrixXd& J_nl);
protected:
DiodeModelType m_Type;
}; |
Pour la méthode : virtual LookUpModel BuildLookUpModel() = 0; Intellisense me dit : une fonction qui retourne une classe abstraite "LookUpModel" n'est pas autorisée : fonction "LookUpModel::UseModel" est une fonction virtuelle pure
Je ne comprends pas pourquoi, ni comment contourner le problème... Avez-vous une explication ou une solution?