【问题标题】:Polymorphic list and pointers多态列表和指针
【发布时间】:2018-11-17 13:20:07
【问题描述】:

我是 C++ 新手,并且在多态性上苦苦挣扎。 我有一个项目,我需要一个基类(比如说 Master)和三个派生类。

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。

有人有办法让这个工作吗?提前致谢。

【问题讨论】:

    标签: polymorphism


    【解决方案1】:

    是的,在将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,就不会泄漏内存,就像您在示例中所做的那样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-21
      • 2012-06-07
      • 1970-01-01
      • 2014-11-23
      • 2013-04-29
      • 2012-04-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多