我正忙于一项任务,我必须创建一个结构,并使用该结构创建和删除一个对象。
下面是我如何创建内部有函数的结构。
struct Operation
{
char op;
double (*apply)(Operation*, double,double); // takes two doubles
}
我完全理解。现在必须创建对象。
Operation* Make(char op)
{
Operation* ret = new Operation;
ret -> op = op;
ret -> apply = doit;//doit is a norther function
return ret;
}
我知道“->”歌剧等同于说:
(*ret).op = op;
以及删除对象;
void BrakeObject(Operation& o)
{
delete o;
o = NULL;
}
函数(应用)看起来和基本函数一样吗? 这是数组吗?
Operation* ret = new Operation;
对象是什么?它只是一个函数吗?
最佳答案
为什么要动态分配?为什么不简单地:
Operation Make(char op)
{
Operation ret = {op, doit};
return ret;
}
或者,如果您使用的是 C++11,只需:
Operation Make(char op)
{
return {op, doit};
}
这两种情况都不需要再手动删除
还有,为什么apply
要进行另一个操作?评论说“需要两次 double ”,所以:
double (*apply)(double,double);
对我来说更有意义。另外,doit
从何而来?将 apply 函数也作为参数传递不是更有意义吗?这是包含所有建议更改的程序:
struct Operation
{
char op;
double (*apply)(double, double);
}
Operation Make(char op, double (*apply)(double, double))
{
Operation ret = {op, apply};
return ret;
}
double add(double x, double y)
{
return x + y;
}
Operation op_add = Make('+', add);
关于c++ - 结构和对象创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11708079/