【发布时间】:2011-09-30 14:37:47
【问题描述】:
我一直在研究工厂方法并努力寻找解决问题的方法(尽管我觉得它是直截了当的。我正在尝试创建来自同一个派生类的对象,这在前进,但他们有不同的参数。
class Base
{
public:
Base(){};
~Base(){};
std::string name;
double base_input;
double output;
virtual void relation_function()=0;
};
class Derived1 : public Base
{
public:
double private_input;
int multiplier;
Derived1(std::string , double , double , int);
~Derived1(){};
virtual void relation_function();
};
class Derived2 : public Base
{
public:
double private_input;
int multiplier;
Derived2(std::string , double , int);
~Derived2(){};
virtual void relation_function();
};
参数根据其构造函数注入派生类中。
Derived1::Derived1(std::string input_name, double input_base_input,double input_private_input,
int input_multiplier){
name=input_name;
base_input=input_base_input;
private_input=input_private_input;
multiplier=input_multiplier;
};
Derived2::Derived2(std::string input_name,double input_private_input,int input_multiplier)
{
name=input_name;
private_input=input_private_input;
multiplier=input_multiplier;
void relation_function();};
void Derived2:: relation_function(){output=multiplier*private_input;};
void Derived1:: relation_function(){output=multiplier*base_input*private_input;};
目前我正在手动创建派生类的实例,如下所示
std::vector<std::string> v(3);
v[0]="a";v[1]="b";v[2]="c";
for (int n=0;n<=2;n++)
Base* pderived1(new Derived1(v[n],2,2,1));
std::vector<std::string> v(2);
v[0]="d";v[1]="e";
for (int n=0;n<=1;n++)
Base* pderived1(new Derived1(v[n],5,9,9));
这并不理想,我需要首先创建一个指向派生类的构造函数的指针,以在从每个派生类创建多个实例之前“修复”/“冻结”构造函数中的一些参数。
base* (*pconstructor){string, double, double, int) = Derived (string, 2,2,1)
目的是在传递给以下函数以创建对象之前,使用指向构造函数的this指针作为主要工具来指示参数。下面的函数将充当工厂来创建派生1或派生所需的实例/对象的数量,这些实例/对象可能在其构造函数(如派生2)中具有不同的参数。
base* function(std::vector<string>){ create instances.. }
我不知道如何创建指针来操作构造函数参数,也不知道如何创建用于创建实例的函数。请提供任何线索。 提前感谢大家对 C++ 新手的帮助!
【问题讨论】:
-
我不知道如何创建指针来操作构造函数参数,也不知道用于创建实例的函数..
-
word factory 在这里为我竖起了大红旗。除非您提供其作用的描述,否则这将仍然令人困惑
标签: c++ function pointers function-pointers factory-pattern