Я новичок в C ++ и борюсь с полиморфизмом.У меня есть проект, где мне нужно иметь базовый класс (скажем, Мастер) и три производных класса.
class Master {
public :
virtual void run();
//Other attributes non-important for the topic
}
class Derived1 : public Master {
public:
void run();
//attributes
}
class Derived2 : public Master{
public :
Derived2(Derived1* ptr1) {ptr = ptr1;} //there comes the cause of the problem
void run();
private :
Derived1* ptr;
}
В моем основном я хочу создать полиморфный список vector<Master*> poly_list;
Но проблема в том, что этот список содержит только указатели на мастер-класс, поэтому даже если он может вызвать правильную функцию run ();Я не могу отправить адрес Derived1 конструктору Derived2.
Я хотел продолжить так:
int main
{
vector<Master*> poly_list;
poly_list.push_back(new Derived1());
poly_list.push_back(new Derived2(poly_list[0]));
return 0
}
И когда я компилирую код, компилятор говорит мне, что он не может преобразовать тип Master в Derived1 для конструктора.
У кого-нибудь есть способ, чтобы это сработало?Заранее спасибо.