通过共享指针生成不同继承类的实例

Generating Instances of Different Inherited Classes through Shared Pointers

本文关键字:继承 实例 共享 指针      更新时间:2023-10-16

我是C++的新手,所以请原谅原始的编码技术。我正试图弄清楚如何创建一个函数来生成指向不同继承类的共享指针。

class base{
/*.... members ...*/};
class derived1: public base{
/*.... members ...*/
derived1(int){};
~derived1(){};
}
class derived2: public base{
/*.... members ...*/
derived2(int,int){};
~derived2(){};
}

为了创建每个派生策略的多个实例,我有两个不同的函数,它们通过共享指针手动完成。

typedef std::tr1::shared_ptr<Base> Base_ptr_type;
void fn1(int i){
for (t=0;t<=no_instances1;t++)
    Base_ptr_type  p1(new derived1(i));
}
void fn2(int i, int j){
for (t=0;t<=no_instances2;t++)
    Base_ptr_type  p2(new derived1(i,j));
}

我想把这两个不同的函数结合起来。在未来,我将开发更多的派生类,我正在寻找一个以派生类构造函数参数为参数的函数。上的一些东西

Base_ptr_type p1(new derived1(i));
Base_ptr_type p2(new derived2(i,i);

void Global_fn(int no_instances, Base_ptr_type ptr ){ ??????  }

因此,当我们应用Global_fn(p1(时,它生成了derived1的多个实例,而Global_filn(p2(则基于每个相应派生类的构造函数参数生成了derided2的多个例子。

感谢您在之前提供的所有帮助

谢谢你,伊戈尔。您的解决方案给了我一个链接问题错误LNK2001:未解决的外部符号!我怀疑你在基类和派生类中的vitualfunction不是一个void函数,必须返回一些东西?我没有看到下面指向代码的typedef std::tr1::shared_ptr<Base> Base_ptr_type指针的声明,这些指针对于创建具有所需参数的实例是必要的?

    Base_ptr_type p1(new derived1(i));
    Base_ptr_type p2(new derived2(i,i);

再次感谢

欢呼

您应该使用一个工厂,独立的或作为base、derived1和derived2的一部分。


其中一种方法是:将重载的create_instance函数添加到所有类中:

class base{
public: 
 virtual base* create_instance() = 0;
};
class derived1: public derived1{
public: 
 virtual base* create_instance(); // creates derived1
};
class derived2: public base{
public: 
 virtual base* create_instance(); // creates derived2
};
void Global_fn(int no_instances, Base_ptr_type ptr )
{ 
   for (int i = 0; i < no_instances; i++)
     ptr->create_instance(); 
}