Une classe abstraite et une classe contenant un pointeur sur une dérivée de
cette classe.
Imaginons une class D dérivant de A, je voudrais, dans le constructeur de A,
créer une instance de la classe D (i.e. n'importe qu'elle classe dérivée de
A), classe dont je voudrais passer le type en paramètre du constructeur. De
plus, j'aimerai avoir une valeur par défaut...
class A
{
protected: A() {...}
public: virtual void foo() = 0;
};
class D : public A {...};
class B
{
private: A* mA;
public:
B(class A deriveeofA = D) // ligne invalide: type de la classe que je
veux instancier
{
mA = new deriveeofA(); // création d'une instance de la classe
}
};
Bon, je sais pas si tout ca est très clair... :)
Merci de vos réponses.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Arnaud Debaene
Frédéric GOURUL wrote:
Bonjour, j'expose ce que j'aimerai pouvoir faire:
Une classe abstraite et une classe contenant un pointeur sur une dérivée de cette classe. Imaginons une class D dérivant de A, je voudrais, dans le constructeur de A, créer une instance de la classe D (i.e. n'importe qu'elle classe dérivée de A), classe dont je voudrais passer le type en paramètre du constructeur. De plus, j'aimerai avoir une valeur par défaut...
class A { protected: A() {...} public: virtual void foo() = 0; };
class D : public A {...};
class B { private: A* mA; public: B(class A deriveeofA = D) // ligne invalide: type de la classe que je veux instancier { mA = new deriveeofA(); // création d'une instance de la classe } };
Bon, je sais pas si tout ca est très clair... :) Merci de vos réponses.
On ne peut pas faire directement ce que tu veux en C++, mais on utilise souvent l'idiome de "l'object factory" pour cela. En résumé, touts les classes dérivées de A sont enregistrées aurpès d'un objet "fabrique" qui sait quelle classe dérivée construire à partir d'un "identifiant de type" (qui peut être une chaîne ou un aute identifiant unique).
Arnaud
Frédéric GOURUL wrote:
Bonjour, j'expose ce que j'aimerai pouvoir faire:
Une classe abstraite et une classe contenant un pointeur sur une
dérivée de cette classe.
Imaginons une class D dérivant de A, je voudrais, dans le
constructeur de A, créer une instance de la classe D (i.e. n'importe
qu'elle classe dérivée de A), classe dont je voudrais passer le type
en paramètre du constructeur. De plus, j'aimerai avoir une valeur par
défaut...
class A
{
protected: A() {...}
public: virtual void foo() = 0;
};
class D : public A {...};
class B
{
private: A* mA;
public:
B(class A deriveeofA = D) // ligne invalide: type de la classe
que je veux instancier
{
mA = new deriveeofA(); // création d'une instance de la classe
}
};
Bon, je sais pas si tout ca est très clair... :)
Merci de vos réponses.
On ne peut pas faire directement ce que tu veux en C++, mais on utilise
souvent l'idiome de "l'object factory" pour cela. En résumé, touts les
classes dérivées de A sont enregistrées aurpès d'un objet "fabrique" qui
sait quelle classe dérivée construire à partir d'un "identifiant de type"
(qui peut être une chaîne ou un aute identifiant unique).
Une classe abstraite et une classe contenant un pointeur sur une dérivée de cette classe. Imaginons une class D dérivant de A, je voudrais, dans le constructeur de A, créer une instance de la classe D (i.e. n'importe qu'elle classe dérivée de A), classe dont je voudrais passer le type en paramètre du constructeur. De plus, j'aimerai avoir une valeur par défaut...
class A { protected: A() {...} public: virtual void foo() = 0; };
class D : public A {...};
class B { private: A* mA; public: B(class A deriveeofA = D) // ligne invalide: type de la classe que je veux instancier { mA = new deriveeofA(); // création d'une instance de la classe } };
Bon, je sais pas si tout ca est très clair... :) Merci de vos réponses.
On ne peut pas faire directement ce que tu veux en C++, mais on utilise souvent l'idiome de "l'object factory" pour cela. En résumé, touts les classes dérivées de A sont enregistrées aurpès d'un objet "fabrique" qui sait quelle classe dérivée construire à partir d'un "identifiant de type" (qui peut être une chaîne ou un aute identifiant unique).