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

标签 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));
}

我想结合这两个不同的函数。在未来,我将开发更多的派生类,我正在寻找一个函数,你将把派生类的构造函数参数作为它的参数。Somthing along

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);

再次感谢,

干杯

最佳答案

你应该使用 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(); 
}

关于c++ - 通过共享指针生成不同继承类的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6585555/

相关文章:

c - 理解字符串数组 C

c - 递增 C 指针

c++ - 在两个数据结构中持有相同的唯一指针

c++ - NVCC + Cereal,没有那个文件或目录

c++ - vector 和堆栈之间的主要区别是什么?

java - 来自 superClass 的 JPA OneToMany 关联

javascript - 在javascript中继承和使用父类(super class)的构造函数

c++ - T* 和 T*& C++ 的区别

今天的 C++ 多线程与 C++ 11 的流动情况 - 书籍建议

c# - 如何从基泛型类派生泛型类?