【发布时间】:2011-07-05 15:59:33
【问题描述】:
我是 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:未解析的外部符号!我怀疑您在基类和派生类中的 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);
再次感谢,
干杯
【问题讨论】:
标签: c++ inheritance pointers polymorphism