多态列表和指针

时间:2018-11-17 13:20:07

标签: polymorphism

我是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; 但是问题在于该列表仅包含Master类上的指针,因此即使它可以调用正确的函数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。

有人能做到这一点吗?预先感谢。

1 个答案:

答案 0 :(得分:0)

是的,在将Derived1推入列表之前,先获取其指针:

vector<Master*> poly_list;

Derived1 *d=new Derived1();
poly_list.push_back(d);
poly_list.push_back(new Derived2(d));

另外,请不要使用原始指针,而应使用std::unique_ptr智能指针,这样,如果忘记执行delete,就不会泄漏内存,就像在示例中一样。 / p>