J'ai récemment reçu un very good answer as how to overload specific class members en dérivant des classes.Polymorphisme de modèle
La question est maintenant que l'un des membres est en fait basé sur un modèle avec des spécialisations étant soit BaseClass
, DerivedClass
ou Derived2Class
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
template<class T>
class Queue
{
public:
Queue();
Queue(T*);
}
class Com
{
public:
virtual void setReady()
{
cout << "Com" << endl;
}
};
class DerivedCom : public Com
{
public:
void setReady()
{
cout << "DCom" << endl;
}
};
class Derived2Com : public Com
{
public:
void setReady()
{
cout << "D2Com" << endl;
}
};
class BaseClass
{
protected:
Com* com;
Queue<BaseClass>* queue;
public:
BaseClass(Com* c = new Com, Queue<BaseClass>* q = new Queue<BaseClass>) : com(c), queue(q)
{
}
void setReady()
{
com->setReady();
}
};
class DerivedClass : public BaseClass
{
public:
DerivedClass() : BaseClass(new DerivedCom, new Queue<DerivedClass>)
{
}
};
class Derived2Class : public BaseClass
{
public:
Derived2Class() : BaseClass(new Derived2Com, new Queue<Derived2Class>)
{}
};
int main()
{
BaseClass* base = new Derived2Class();
base->setReady();
return 0;
}
je peux, sans problème, les classes simples « surcharge » comme Com
, DerivedCom
et Derived2Com
mais la signature du constructeur de BaseClass
ne correspondra pas au type que les classes dérivantes essaient de lui envoyer.
S'il s'agit simplement d'une erreur qui manque '' 'avant' q' dans 'BaseClass (Com * c = nouveau Com, Queue q = new Queue )' alors corrigez-le. Mais cela ne résoudra pas vos problèmes ... –
PiotrNycz
Le point crucial est que Queue ne dérive pas de la file d'attente ' –