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

时间:2011-07-05 15:59:33

标签: c++ inheritance pointers polymorphism

我是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_fn(p2)的实例,它会根据每个派生类的构造函数参数生成一些derived2实例。

提前感谢您的所有帮助

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

    Base_ptr_type p1(new derived1(i));

    Base_ptr_type p2(new derived2(i,i);

再次感谢,

欢呼声

1 个答案:

答案 0 :(得分:0)

您应该使用factory,独立或作为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(); 
}