Так что вот в чем дело, я думаю, что мне нужно пойти другим путем в отношении шаблона, который я использую, но я подумал, что сначала должен получить некоторые экспертные заключения.
У меня есть класс (UsingClass), который поддерживаетдинамический список указателей базового класса.При добавлении нового объекта в список я должен выяснить, что это за тип объекта, потому что я не могу заставить его работать полиморфно.Строка ниже с меткой "ЭТО НЕ БУДЕТ РАБОТАТЬ, КАК Я ХОЧУ, ЧТО ЭТО ХОЧУ !!"в идеале полиморфно использовать оператор = из интересующего класса Derived, но, к сожалению, он использует только оператор default = для базового класса .... вероятно, будет работать, если я сделаю Base чисто виртуальной (в основном, ограничив ее использование интерфейсом безсобственные данные), но я не хочу, чтобы классы Derived содержали членов, которые являются общими для обоих (возможно, мне нужно просто вырезать приманку и сделать это).
Я думаю, что я могу простополностью использовать неправильный шаблон, но я не знаю, какие альтернативы мне следует рассмотреть.
Я знаю, что код не обязательно компилируется, но, пожалуйста, работайте со мной.Заранее спасибо!
//code block
class Base {
protected:
int x;
float y;
string type; // default to Derived1 or Dervied2 depending on the object inst
public:
virtual int functionM(int l) = 0;
int functionN(int P);
};
class Derived1 : public Base {
protected:
int a;
public:
int functionM(int l);
float functionR(int h);
};
class Derived2 : public Base {
protected:
int b;
float r;
public:
int functionM(int l);
float functionR(int h);
};
#define MAX_ARRAYSIZE 10
class UsingClass {
private:
Base* myDerived1And2DynamicList[MAX_ARRAYSIZE];
int indexForDynamicList;
public:
void functionAddDerivedToList(*Base myInputPtr) {
if((indexForDyanmicList + 1) < MAX_ARRAYSIZE) {
if(myInputPtr->type == "Derived1") {
myDerived1And2DynamicList[indexForDyanmicList+1] = new Derived1;
*myDerived1And2DynamicList[indexForDyanmicList+1] = *myInputPtr; // THIS WILL NOT WORK LIKE I WANT IT TO!!
} else if (myInputPtr->type == "Derived2") {
myDerived1And2DynamicList[indexForDyanmicList+1] = new Derived2;
*myDerived1And2DynamicList[indexForDyanmicList+1] = *myInputPtr; // THIS WILL NOT WORK LIKE I WANT IT TO!!
}
}
} // end of void function
};